Предмет: Информатика, автор: Эклео

PascalABC.NET

Вот кусочек программки:

// x=3.1 (введено с клавиатуры)
// y=0.8 (введено с клавиатуры)
// p=2 (рассчитано программой выше)

a:=Frac(x); // =0,1
b:=Frac(y)-0.5; // =0,3
kp:=sqrt(sqr(0.5-a)+b*b); // =0,5
if kp>=0.5 then p:=p+1;

и вот тут компьютер почему-то считает, что kp<0,5
т.е. при выводе на экран, - выводится значение kp=0.5, но при сравнении с 0,5 оно оказывается меньше.
Перепробовала все, что смогла придумать. Даже сравнивала kp с корнем из 0.25 (чем оно и является). Безрезультатно.

Мне нужны конкретные ответы на вопросы:
1) Почему переменная, равная 0,5, меньше, чем 0,5?!
2) Как это можно исправить?

Заранее спасибо.

PS: вычисление корня заменить ничем нельзя (нахождение гипотенузы)

Ответы

Автор ответа: Аноним
0
Чтобы разъяснить происходящее, были сделаны следующие шаги.
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;
Приложения:
Автор ответа: Эклео
0
Спасибо! Все наглядно и понятно.
Автор ответа: Аноним
0
Пожалуйста
Интересные вопросы
Предмет: Окружающий мир, автор: Аноним
Суммативное оценивание за раздел «Экология и устойчивое развитие»

по предмету естествознание

Задание №1



Прочитайте текст.

Растения на свету образуют органические вещества. Травоядные животные поедают растения и используют вещест¬ва, накопленные растениями, для построения своего тела и полу¬чения энергии. Таким образом, значительная часть органических веществ растений переходит в тела растительноядных организмов и расходуется ими на построение новых клеток и на получение энергии. Растительноядных животных поедают хищники. В конечных звеньях пищевой цепи органические вещества от¬мерших организмов, их частей (листья, ветки, корни растений или выделения живых организмов) служат пищей для грибов, мно¬гих протистов и бактерий. Грибы, протесты и бактерии превращают органические вещества в неорганические. Так пополняется запас неорганических веществ в почве и воде. Неорганические вещества затем снова используются растениями. Таким образом, в природе осуществляется круговорот веществ.



(а) Что является природной единицей круговорота веществ?

(б) Как возникает круговорот веществ?

(в) Какое главное условие его существования?

(г) Какова роль растений и животных в круговороте веществ? [3]








Задание №2

2 (а) Определите формы влияния человека на живую природу (назовите не менее 3).

1. _____________________________________________________________________

2. _____________________________________________________________________

3. _____________________________________________________________________



[1]



2 (б) Проанализируйте отрицательное влияние человека на природу в вашем регионе. Назовите не менее 2-х форм отрицательного влияния человека на природу.



Заполните таблицу (первая строка заполнена для вас для примера).

Форма влияния человека

(отрицательное) Примеры Последствия влияния

Вырубка леса Строительство коттеджей, гостиниц в горах Заилийского Алатау Исчезновение видов растений/животных; миграция животных, птиц и млекопитающих; недостаток кислорода













[2]






Задание № 3

1. Определите живые компонеты экоситемы и укажите номера ячеек в схеме ответов, которые соответствуют трем компонентам.

2.

Растения

№1 Производят органические вещества

№2 Бактерии



№3 Потребляют в пищу готовые органические вещества

№4 Разлагают мертвые организмы

№5



№6 Грибы

№7

№8 Картофель

№9

№10

Крокодил

№11 Животные

№12

№13 Клевер

№14 Слон

№15

Схема ответов



Живые компоненты экосистемы Номера соответствующих ячеек

Продуценты

Консументы

Редуценты









[3]



сейчас ​
Предмет: Математика, автор: markov0206