2014-09-26 89 views
3

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

所以,一个人不必使用魔术常量......我认为会有像float.precision,但我没有看到它。

对于float它会返回7,双15等

+2

据我所知,没有 – 2014-09-26 10:05:29

+1

为什么你需要这样做? – 2014-09-26 10:07:40

+5

鉴于这种类型的适用数量很少,为什么不对它进行硬编码呢? (当然,在一个地方。) – 2014-09-26 10:08:10

回答

4

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

这已经足够真实了,Intel/AMD处理器实际上存储的浮点数值是,更精确的是。他们的内部格式是80位。这个设计决策是一个无法解决的灾难,它会导致计算结果随机更改,具体取决于代码是否在Release或Debug版本中运行,当计算失去大量有效数字时,代码的非常小的更改可能会导致截然不同的结果。协处理器刚刚被重新设计,以解决这个问题,但我们仍然坚持32位代码中的旧问题。微软无法修复x86抖动,转向新的协处理器设计会打破太多现有的程序。

出于所有实际目的,您可以将精度硬编码为7位和15位。遵循IEEE-754标准,它规定了单精度浮点值和双精度浮点值的编码。这将持续到下一个50年。不实用的是在没有硬件支持的情况下在处理器上运行的.NET Micro Framework应用程序。

请保持其他原因记住为什么精度不暴露,它承诺完全太多。当你计算,比如0.1234567f - 0.1234568f,那么你只有一个有效数字左边。在大多数情况下生成垃圾结果。

+0

谢谢你有见地的答案! – NoxArt 2014-09-26 14:30:20