单,双和精度

时间:2017-01-21 13:13:27

标签: delphi

我知道存储单个值(或双倍)不能非常精确。所以存储例如125.12可以得到125.1200074788。现在在delphi中,它们是一些有用的函数,比如samevalue或comparevalue,它们将epsilon作为参数,并说125.1200074788或例如125.1200087952是相等的。

但我经常在代码中看到:如果aSingleVar = 0那么......这实际上就像我看到的一样。为什么?为什么在单个var中存储0的例子保持准确值?

2 个答案:

答案 0 :(得分:10)

只有m*2^e形式的值,其中m和e是整数,可以存储在浮点变量中(不是所有的变量,都取决于精度)。 0有此表单,而125.12没有,因为它等于3128/25,而1/25不是2的整数幂。

125.12与单个(或双精度)精度变量进行比较很可能总是返回False,因为文字125.12将被视为扩展精度数,而不是单个(或者)精确数将具有这样的值。

答案 1 :(得分:-1)

Rudy Velthuis看起来很适合BigDecimals部队。精确度和精度的数百万位小数。