如果有效数字的最低有效位被设置为随机值,对浮点数学可能产生什么影响?
解释:
PicoLisp语言使用一种结构分配所有值,即单元格,它由两个“机器字”组成。在 32 位系统上,这意味着一个单元是由两个 32 位指针或整数组成的八字节结构。单元格与它们的大小对齐,这意味着至少一个字的最低三位可以自由地用作类型和 GC 标记数据。
PicoLisp 非常简约。该语言缺乏的(许多)事情之一是对浮点数的任何支持,而不是完全依赖于文档所谓的“缩放定点”表示。我认为尝试添加浮点支持会很有趣。
在 32 位系统上,一个 64 位浮点数将整齐地放入一个单元格中,这意味着分配系统可以几乎相同,除了一个小问题:所有 64 位将被双精度使用。但是 GC 期望使用位 0 作为 GC 标记位。天真地进行,在每个收集周期之后,位 0 将被设置为零,而不管实际存储在双精度中的值是什么。
(这是假设大小和字节顺序都正确排列。为此假设他们这样做;如果他们不这样做,那么整个问题是完全不相关的,并且必须使用不同的策略。)
那么:对于使用硬件浮点运算的通用数学来说,这有多大的问题?
如果它所做的只是稍微降低 double 的精度,那么我认为这实际上不是问题:只要有文件证明解释器中的浮点数学不如用户期望的那么精确,他们应该如果他们需要严格准确的行为,则回退到固定点或库或其他东西。我对它的直观理解是应该是这种情况,因为它是最低有效位(当您转换为字符串时甚至不会出现......?)。
另一方面,浮点是,呃,巫术。这种比特摆弄真的会严重影响数学的有用性或产生任何一致结果的能力吗?
(我已经考虑了分配器的其他几种实现可能性。我特别感兴趣的是这个策略是否非常愚蠢,因为它最简单而且我很懒惰。)