Неточный дробный тип в Rust
Дробные значения хранятся приближенно. Не каждая десятичная дробь представима точно в двоичном виде, поэтому в памяти остается близкое, но не идеальное число.
При сложении на экран может попасть результат с длинным хвостом цифр. Это нормальное поведение типа, а не опечатка в программе.
Сложим две известные десятичные дроби и выведем сумму:
println!("{}", 0.1 + 0.2);
Печатное значение не совпадает с простой
записью 0.3 в голове. Сравнивать такую
сумму с 0.3 знаком равенства как с
истиной не стоит: условие может не выполниться,
хотя математически мы ждем тройку в десятых.
Даны числа:
let num1 = 0.1;
let num2 = 0.2;
Выведите их сумму и опишите, чем она может
отличаться от 0.3.
Скажите, почему не стоит проверять
0.1 + 0.2 == 0.3 как истину.
Скажите, означает ли длинный хвост цифр при выводе, что программа сломана.