gpt4 book ai didi

c# - 如何获得类型的精度?

转载 作者:行者123 更新时间:2023-11-30 15:28:13 24 4
gpt4 key购买 nike

有没有办法获得类型或变量的最大精度?

这样就不必使用魔法常量了……我以为会有类似 float.precision 的东西,但我没有看到。

对于 float 它将返回 7,对于 double 15 等

最佳答案

没有内置的方法来发现这一点。核心问题是 CLI 规范没有指定 float 或 double 的编码方式。它允许 CLR 实现使用比预定义的“float32”和“float64”类型精度更高的 native 浮点类型。

这很真实,Intel/AMD 处理器实际上以更高的精度存储浮点值。它们的内部格式是 80 位。这个设计决定是一场彻头彻尾的灾难,它会导致计算结果随机变化,具体取决于代码是在 Release 还是 Debug 构建中运行,当计算丢失大量有效数字时,对代码进行非常小的更改可能会导致截然不同的结果。不久前重新设计了协处理器来解决这个问题,但我们仍然在 32 位代码中遇到这个老问题。 Microsoft 无法修复 x86 抖动,转向新的协处理器设计会破坏太多现有程序。

出于所有实际目的,您可以将精度硬编码为 7 位和 15 位数字。 IEEE-754 标准一成不变,该标准规定了单精度和 double 浮点值的编码。它将持续 future 50年。非实用的是在没有硬件支持的处理器上运行的 .NET Micro Framework 应用程序。

请牢记 其他 精度未公开的原因,它 promise 的太多了。例如,当您计算 0.1234567f - 0.1234568f 时,您只剩下 一个 有效数字。在大多数情况下会产生垃圾结果。

关于c# - 如何获得类型的精度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26057007/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com