Добавил:
dr_who
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабы по Visual Studio C++ (Волков) - ОТЧЁТЫ с подробным кодом / ВАЖНО!!! (для лабы 5)
.txt ДЛЯ ЛАБЫ 5 (Экспонента):
Ребят, терпения вам в защите, расскажете ему про его любимую "коробочку" из байтов для чисел с плавающей запятой двойной точности Double (знак, мантисса и порядок - картинку вот отсюда https://ru.wikipedia.org/wiki/Число_двойной_точности ему покажете).
В целом статьи с вики (и не только) мб помогут, в самой лабе в конце есть сравнение точности Double с Decimal. В общем, удачи, мы сдали и вы сдадите (подсказывайте одногруппникам что ему говорить, если первые сдаёте и его устраивает).
P.s. Как я объяснял одногруппникам:
"Крч у тебя мантисса числа double хранит 52 бита - то есть 52 "коробочки" ((c) Волков), которые хранят 0 или 1.
Когда у тебя во всех 52 "коробочках" единицы - это 2^52 - то есть это максимальное (десятичное) число, которое может хранить мантисса (на калькуляторе ему покажешь)
У тебя при х=21 число (не считаешь запятую) получается БОЛЬШЕ того максимального числа (если считать 15 знаков, т.к. ты гарантируешь точность eps = 0.000001 до 6 знака после запятой)
следовательно точности при 21 уже не хватит и он просто выведет 0 там.
А при х = 20 у тебя если считать до 6 знака после запятой - точности хватает, число получается меньше максимального для мантиссы. Следовательно ПРЕДПОСЛЕДНИЙ ноль там (ты обещаешь 6 знаков, выводишь 7, но на 7-ой тебе плевать, он для проверки) действительно равен нулю.
Потом ты делаешь копию проги, в которой всё меняешь на Decimal (который может это подсчитать) и показываешь ему, что на Х=20 там в конце "01", который округляется до "0" у тебя в Double - следовательно 20 он считает правильно."
Ребят, терпения вам в защите, расскажете ему про его любимую "коробочку" из байтов для чисел с плавающей запятой двойной точности Double (знак, мантисса и порядок - картинку вот отсюда https://ru.wikipedia.org/wiki/Число_двойной_точности ему покажете).
В целом статьи с вики (и не только) мб помогут, в самой лабе в конце есть сравнение точности Double с Decimal. В общем, удачи, мы сдали и вы сдадите (подсказывайте одногруппникам что ему говорить, если первые сдаёте и его устраивает).
P.s. Как я объяснял одногруппникам:
"Крч у тебя мантисса числа double хранит 52 бита - то есть 52 "коробочки" ((c) Волков), которые хранят 0 или 1.
Когда у тебя во всех 52 "коробочках" единицы - это 2^52 - то есть это максимальное (десятичное) число, которое может хранить мантисса (на калькуляторе ему покажешь)
У тебя при х=21 число (не считаешь запятую) получается БОЛЬШЕ того максимального числа (если считать 15 знаков, т.к. ты гарантируешь точность eps = 0.000001 до 6 знака после запятой)
следовательно точности при 21 уже не хватит и он просто выведет 0 там.
А при х = 20 у тебя если считать до 6 знака после запятой - точности хватает, число получается меньше максимального для мантиссы. Следовательно ПРЕДПОСЛЕДНИЙ ноль там (ты обещаешь 6 знаков, выводишь 7, но на 7-ой тебе плевать, он для проверки) действительно равен нулю.
Потом ты делаешь копию проги, в которой всё меняешь на Decimal (который может это подсчитать) и показываешь ему, что на Х=20 там в конце "01", который округляется до "0" у тебя в Double - следовательно 20 он считает правильно."
Соседние файлы в папке Лабы по Visual Studio C++ (Волков) - ОТЧЁТЫ с подробным кодом