有没有一种方法可以获得类型或变量的最大精度?
这样一来,您就不必使用魔术常数了……我以为会有float.precision之类的东西,但我看不到.
对于float,它将返回7,对于double 15等.
解决方法:
没有内置的方法可以发现这一点.核心问题是CLI规范未指定浮点数或双精度数的编码方式.它允许CLR实现使用本机浮点类型,该类型的浮点类型比预定义的“ float32”和“ float64”类型具有更高的精度.
这是事实,英特尔/ AMD处理器实际上可以更精确地存储浮点值.它们的内部格式为80位.这个设计决定是无法缓解的灾难,它会导致计算结果根据代码是在Release版本还是在Debug版本中运行而随机变化,当计算丢失大量有效数字时,对代码进行很小的更改可能会导致截然不同的结果.协处理器在不久前进行了重新设计,以解决此问题,但我们仍然对32位代码中的旧问题感到困惑. Microsoft无法修复x86抖动,而转向新的协处理器设计会破坏太多现有程序.
出于所有实际目的,您可以将精度硬编码为7位和15位数字.遵循IEEE-754标准,该标准规定了单精度和双精度浮点值的编码.它将持续未来50年.非实用程序是在没有硬件支持的处理器上运行的.NET Micro Framework应用程序.
一定要记住另一个原因,即为什么不公开精度,但它绝对会带来太多.例如,当您计算0.1234567f-0.1234568f时,只剩下一个有效数字.大多数情况下会产生垃圾结果.