Я понимаю, почему 0.1 + 0.2
дает это в Python 3:
>>> 0.1 + 0.2
0.30000000000000004
... но я не понимаю, почему существует 36-значный участок (в основном) ненулевых цифр всередина вывода, показанного ниже:
>>> print('%.70f' % (0.2 + 0.1))
0.3000000000000000444089209850062616169452667236328125000000000000000000
Я ожидаю, что будет разница между 0,1 + 0,2 и двоичным числом с плавающей запятой IEEE 754, ближайшим к 0,1 + 0,2, но я не понимаю, почему эта разницаприведет к 36-значному представлению (что соответствует примерно ~ 120 битам точности).
Я мог бы понять, имела ли ошибка гораздо меньшую (<53 бит) точность, или имела (кажущуюся) бесконечную точность, может быть из-за артефакта алгоритма оценки <code>'%.70f' % (0.2 + 0.1). Но я не могу понять ошибку, которая привела бы к 36-значному патчу, показанному выше.