2015-12-19 19 views
1

Я наткнулся на Factor language и получил интерес к программированию на основе стека. Фактор выглядит кратким, использует минимальный синтаксис и пунктуацию и предлагает почти полнофункциональную библиотеку для решения реальных проблем. По крайней мере, достаточно для того, чтобы попробовать.Округление с плавающей запятой в факторе

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

IN: scratchpad 8.12 

--- Data stack: 
8.119999999999999 

И почему это не отражается на других поплавках?

IN: scratchpad 8.23 

--- Data stack: 
8.23 

ответ

2

Это потому, что в двоичной с плавающей запятой значение 8.12 не является представимым. Это бесконечно длинное десятичное расширение. Подобно тому, как рациональный 1/3 равен 0.333... как десятичный, 203/25 имеет бесконечное число цифр в двоичном формате. Поэтому, когда вы конвертируете его из двоичного в десятичный для печати, вы получаете ошибки округления.

Это известная проблема, см .: https://github.com/slavapestov/factor/issues/1158. Но он только косметический и не влияет на расчеты.

Смежные вопросы