увы, неполностью описал. важные мелочи:
Александр Петросян (PAF) 12.12.2005 13:34
/ 12.12.2005 13:35
первое: в double хранится фиксированное количество значащих
бит, а не
15 десятичных знаков.
значащих бит там чуть больше, чем на 15 десятичных знаков. на 15 с хвостиком хватает. отсюда берутся вот эти псевдо "...43":
win32
0.859999999999999
43000
linux
0.859999999999999
43157
и второе:
при определённых обстоятельствах процессор вычисляет и хранит одно и то же число в виде
0.860000000000000 и
0.85(9)
именно отсюда проистекает необходимость всегда округлять.
именно поэтому форматные строчки (^double.format[%.2f]) делают всегда округление (они делают round).