Неточные вычисления в Go
Дробные числа с точкой хранятся приближенно. Не каждая десятичная дробь представима точно в двоичном виде, поэтому в памяти остается близкое, но не идеальное значение.
При сложении таких значений на экран может попасть число с длинным хвостом цифр. Это нормальное поведение типа, а не ошибка записи программы.
Сложим две известные десятичные дроби и выведем результат:
fmt.Println(0.1 + 0.2) // 0.30000000000000004
Тот же результат не совпадает с простой
записью 0.3 в голове, хотя математически
мы ожидаем именно 0.3. Выведем для сравнения
литерал 0.3 отдельной строкой:
fmt.Println(0.3) // 0.3
Даны переменные:
a := 0.1
b := 0.2
Выведите сумму этих переменных и опишите,
чем напечатанное число может отличаться
от 0.3.
Скажите, почему дробные литералы иногда дают длинный хвост цифр при выводе.