Как избежать ошибок точности с плавающей запятой с числами с плавающей запятой или двойными числами в Java ?

У меня очень неприятная проблема с длинными суммами плавает или удваивается в Java. В основном идея состоит в том, что если я выполняю:

for ( float value = 0.0f; value < 1.0f; value += 0.1f )
    System.out.println( value );

Я получаю следующее:

0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.70000005
0.8000001
0.9000001

Я понимаю, что происходит накопление ошибки плавающей точности, однако, как от этого избавиться? Я попытался использовать удвоение, чтобы вдвое уменьшить ошибку, но результат остался тем же.

Есть идеи?

30
задан TylerH 13 December 2016 в 20:02
поделиться