1

我偶然发现了Factor 语言,并对基于堆栈的编程产生了好奇。Factor 看起来简洁,使用最少的语法和标点符号,并为解决现实世界的问题提供了一个几乎功能齐全的库。至少足以让我试一试。

在开始之前,我有一个关于浮点实现的基本问题。当我想在监听器中输出例如8.12时,如何避免这个舍入问题?我使用 32 位 Debian 机器。

IN: scratchpad 8.12

--- Data stack:
8.119999999999999

为什么它对其他花车也没有显示出相同的效果?

IN: scratchpad 8.23

--- Data stack:
8.23
4

1 回答 1

2

这是因为在二进制浮点中,值 8.12 是不可表示的。这是一个无限长的十进制扩展。与有理数1/30.333...十进制类似203/25,二进制的位数是无限的。因此,当您将其从二进制转换回十进制以进行打印时,会出现舍入错误。

这是一个已知问题,请参阅:https ://github.com/slavapestov/factor/issues/1158 。但这只是一个装饰性的,不影响计算。

于 2015-12-20T11:14:23.880 回答