双边界值相等

时间:2019-05-01 08:56:54

标签: c# double

我正在测试某些接受Double值作为输入的函数的边界值。该函数应该能够处理Double的任何值,但是无法比较Doubles的最大值。

我试图找出问题所在,并发现相等的大双打引起了我的问题。我试图将最大值更改为不紧贴最大值,但是没有成功

distinct

我希望Equal11和Equal12为假,就像Equal21和Equal22不相等一样。

我假设double以某种方式将其值四舍五入为Double.MaxValue,但是我不知道如何使用它。

1 个答案:

答案 0 :(得分:3)

假设Double由IEEE 754 64位二进制浮点表示:

连续的浮点数之间的差距随着数字变大而增大。在整个正常有限范围内,[2 n ,2 n + 1 )范围内有2 52 个值。

Double.MaxValue约为1.7976931348623157e308。严格小于此值的最大可表示值约为1.7976931348623155e308,相差1.9958403095347198198e292。从Double.MaxValue舍入到Double.MaxValue的过程中减去googol的结果,说明了减去100和减去200之间没有任何区别。

[-(2 53 ),2 53 ]范围内的所有整数都可以精确表示。该范围内的任意一对不同整数将比较不相等,说明100不等于200。

在注释中,我同意建议,以确定应用程序需要工作的范围,并针对该范围进行测试,而不是尝试使其工作于Double算术极限附近。您将需要处理浮点取整的后果。通常,它导致在实数运算中等于的值不等式,但也可能导致实数运算导致不等式的相等性。