АКОС 9. float/double, IEEE 754, почему 0.1+0.2 != 0.3 и другие приколы

Архитектура компьютера и операционные системы. Семинарское занятие 226 группы ФКН ПМИ. НИУ ВШЭ Говорим про то, как устроены числа с плавающей точкой по IEEE 754. Что такое мантисса, знак и экспанента. Почему не любой int можно представить точно в float и как разными легальными и нелегальными способами получать части числа. Ведет Миша Филитов Конспект: Канал в телеге: 0:00 - вступление 0:31 - в си тоже 0.1 0.2!=0.3? 3:05 - числа с фиксированной точкой 7:00 - числа с плавающей точкой 9:43 - нормализация 13:01 - NaN, Inf, -Inf 15:10 - переводим руками число в float (представление конечное) 20:35 - переводим руками число в float (представление бесконечное) 23:08 - округление к ближайшему четному 28:24 - memcpy (получаем части float числа) 35:30 - хак с указателями (получаем части float числа) (нарушаем strict aliasing) 39:32 - хак с Union (получаем части float числа) (implementation defined) 49:04 - получаем Nan, Inf в коде 54:22 - любой ли int можно представить в float? 59:21 - (double)1.2 != (float)1.2 1:03:51 - смотрим на биты в 0.1 0.2 и 0.3 PS Закрыл камерой вывод в самом конце, поэтому тут добавлю его: 0.1 0.2 = 0011001100110011001100110011001100110011001100110100 0.3 = 0011001100110011001100110011001100110011001100110011
Back to Top