【发布时间】:2015-11-13 12:50:53
【问题描述】:
我正在根据我正在阅读的一篇论文编写一个多精度算术库。能够保证我使用的浮点数的属性非常重要。特别是,它们遵守双精度浮点数的 IEEE 754 标准。显然,我不能保证我的代码在意外平台上的行为,但是对于我正在编写的 x86 和 x64 芯片组,我担心一个特殊的危险。显然,部分或全部 x86 / x64 芯片组可能会在其 FPU 寄存器中使用扩展精度浮点数,精度为 80 位。我不能容忍在扩展精度 FPU 中处理我的算术而不在每次操作后四舍五入到双精度,因为我正在使用的算法的正确性证明依赖于四舍五入的发生。我可以很容易地识别出扩展精度可能会破坏这些算法的情况。
我正在用 C# 编写我的代码。如何保证某些值是四舍五入的?在 C 语言中,我将变量声明为 volatile,强制将它们写回 RAM。这很慢,我宁愿将寄存器中的数字保留为 64 位浮点数,但这些算法的正确性是重点,而不是速度。无论如何,我需要 C# 的解决方案。如果这看起来不可行,我会用不同的语言来解决这个问题。
【问题讨论】:
-
作为缺少
volatile double的解决方法,您可以在每次操作后将操作数转换为字节或从字节转换......这真的很sloooooowwww ..
标签: c# floating-point-precision floating-point-conversion