因子中的浮点舍入
Floating point rounding in Factor
我偶然发现了 Factor language 并对基于堆栈的编程感到好奇。 Factor 看起来简洁,使用最少的语法和标点符号,并为解决现实世界的问题提供了一个几乎功能齐全的库。至少够我试一试了。
在开始之前,我有一个关于浮点实现的基本问题。当我想输出例如8.12 在监听器中?我使用的是 32 位的 Debian 系统。
IN: scratchpad 8.12
--- Data stack:
8.119999999999999
为什么它对其他花车没有同样的效果?
IN: scratchpad 8.23
--- Data stack:
8.23
这是因为在二进制浮点数中,值8.12是不可表示的。它是一个无限长的小数展开式。类似于有理数 1/3
是 0.333...
作为十进制的方式,203/25
在二进制中有无限多的数字。因此,当您将其从二进制转换回十进制以进行打印时,会出现舍入错误。
这是一个已知问题,请参阅:https://github.com/slavapestov/factor/issues/1158。但这只是装饰性的,不影响计算。
我偶然发现了 Factor language 并对基于堆栈的编程感到好奇。 Factor 看起来简洁,使用最少的语法和标点符号,并为解决现实世界的问题提供了一个几乎功能齐全的库。至少够我试一试了。
在开始之前,我有一个关于浮点实现的基本问题。当我想输出例如8.12 在监听器中?我使用的是 32 位的 Debian 系统。
IN: scratchpad 8.12
--- Data stack:
8.119999999999999
为什么它对其他花车没有同样的效果?
IN: scratchpad 8.23
--- Data stack:
8.23
这是因为在二进制浮点数中,值8.12是不可表示的。它是一个无限长的小数展开式。类似于有理数 1/3
是 0.333...
作为十进制的方式,203/25
在二进制中有无限多的数字。因此,当您将其从二进制转换回十进制以进行打印时,会出现舍入错误。
这是一个已知问题,请参阅:https://github.com/slavapestov/factor/issues/1158。但这只是装饰性的,不影响计算。