Чтобы разъяснить происходящее, были сделаны следующие шаги. 1. Константы 3.1 и 0.8 переведены в машинное представление а затем назад в десятичное с максимальной для паскалевских данных вещественного типа real (он же double) точностью (вложения 1 и 2). 2. В системе компьютерной алгебры, позволяющей работать с произвольной точностью (выбрана точность в 30 значащих цифр) для полученных констант выполнены соответствующие заданному фрагменту программы вычисления (вложение 3) 3. Результат 0.499999999999999955591079014996 был переведен в машинное представление. Затем в машинное представление была переведена константа 0.5, которая, как видно во вложении 4, представляется в компьютере точно. Поэтому проверка на точное равенство с 0.5 дает не тот результат, который Вы ожидали. 4. Можно было также воспользоваться программой на паскале. begin var x:=3.1; var y:=0.8; var p:=2; var a:=Frac(x); // =0,1 var b:=Frac(y)-0.5; // =0,3 var kp:=sqrt(sqr(0.5-a)+b*b); // =0,5 if abs(kp-0 Writeln(kp-0.5) end.
Результат: -5.55111512312578E-17 Это как раз то, что так портит Вам всю картину.
По поводу Вашего условия if kp>=0.5 then p=p+1; Ошибка имеет порядок 0.6·10⁻¹⁶ и наверно ничего страшного не будет, если оператор (с запасом) подправить на if kp>=(0.5-1e-15) then p:=p+1;
Времена года состоят из четырех сезонов: лето, когда дни наиболее длинные, а солнце поднимается высоко над горизонтом; зима - дни короткие, а ночи длинные; межсезонные времена года весна и осень, на которые приходится период переходной смены сезонов лета и зимы.
времена года летовремена года зима
Весна - март, апрель, май. Природа начинает пробуждение после зимней спячки, начинается период роста и цветения растений.
Лето - июнь, июль, август. Период активного размножения и роста растительного мира.
Осень - сентябрь, октябрь, ноябрь. Замедление роста, подготовка природы к зимнему сну.
Зима - декабрь, январь, февраль. Период затишья, длительного сна природы.
(для умеренного пояса, центральной части России)
Лето, сменяет прохладная осень, потом наступает зимняя стужа и после приходит долгожданная весенняя оттепель - и так бесконечное количество раз, из года в год. В чём же таинство этого природного явления и почему происходит смена времен года на Земле?
Чтобы в полной мере визуально представить картину как это происходит, стоит рассказать, как движется земной шар в космосе.
Этих движений два:
1) Земля вокруг своей оси (условной линии, проходящей через центр северного и южного полюсов) совершает за сутки полный оборот. Благодаря этому астрономическому явлению день сменяет ночь. Когда на континентах, обращённых к Солнцу, горячий полдень, на неосвещаемых континентах - глубокая ночь.
2) Земля перемещается по эллипсовидной траектории вокруг Солнца, совершая полный оборот в течение 1 года.
1. Константы 3.1 и 0.8 переведены в машинное представление а затем назад в десятичное с максимальной для паскалевских данных вещественного типа real (он же double) точностью (вложения 1 и 2).
2. В системе компьютерной алгебры, позволяющей работать с произвольной точностью (выбрана точность в 30 значащих цифр) для полученных констант выполнены соответствующие заданному фрагменту программы вычисления (вложение 3)
3. Результат 0.499999999999999955591079014996 был переведен в машинное представление. Затем в машинное представление была переведена константа 0.5, которая, как видно во вложении 4, представляется в компьютере точно. Поэтому проверка на точное равенство с 0.5 дает не тот результат, который Вы ожидали.
4. Можно было также воспользоваться программой на паскале.
begin
var x:=3.1;
var y:=0.8;
var p:=2;
var a:=Frac(x); // =0,1
var b:=Frac(y)-0.5; // =0,3
var kp:=sqrt(sqr(0.5-a)+b*b); // =0,5
if abs(kp-0
Writeln(kp-0.5)
end.
Результат: -5.55111512312578E-17
Это как раз то, что так портит Вам всю картину.
По поводу Вашего условия if kp>=0.5 then p=p+1;
Ошибка имеет порядок 0.6·10⁻¹⁶ и наверно ничего страшного не будет, если оператор (с запасом) подправить на if kp>=(0.5-1e-15) then p:=p+1;
Четыре времени года:
Времена года состоят из четырех сезонов: лето, когда дни наиболее длинные, а солнце поднимается высоко над горизонтом; зима - дни короткие, а ночи длинные; межсезонные времена года весна и осень, на которые приходится период переходной смены сезонов лета и зимы.
времена года летовремена года зима
Весна - март, апрель, май. Природа начинает пробуждение после зимней спячки, начинается период роста и цветения растений.
Лето - июнь, июль, август. Период активного размножения и роста растительного мира.
Осень - сентябрь, октябрь, ноябрь. Замедление роста, подготовка природы к зимнему сну.
Зима - декабрь, январь, февраль. Период затишья, длительного сна природы.
(для умеренного пояса, центральной части России)
Лето, сменяет прохладная осень, потом наступает зимняя стужа и после приходит долгожданная весенняя оттепель - и так бесконечное количество раз, из года в год. В чём же таинство этого природного явления и почему происходит смена времен года на Земле?
Чтобы в полной мере визуально представить картину как это происходит, стоит рассказать, как движется земной шар в космосе.
Этих движений два:
1) Земля вокруг своей оси (условной линии, проходящей через центр северного и южного полюсов) совершает за сутки полный оборот. Благодаря этому астрономическому явлению день сменяет ночь. Когда на континентах, обращённых к Солнцу, горячий полдень, на неосвещаемых континентах - глубокая ночь.
2) Земля перемещается по эллипсовидной траектории вокруг Солнца, совершая полный оборот в течение 1 года.