为什么我的计算器在2 ^ 34 == 2 ^ 34 - 1时返回true?

时间:2013-03-13 23:14:50

标签: math floating-point decimal

我在这里提出这个问题是因为我认为这更像是一个程序问题而不是其他任何问题。

我正在使用TI-84 Plus Sliver Edition计算器,该计算器包含可以测试小于,大于和平等的逻辑运算符。我发现当我输入表达式时:

2^34 == 2^34 - 1

它给了我一个令人惊讶的真实。值得一提的是,我的计算器无法精确输出2 ^ 34的结果。相反,它使用指数表示法和任何其他大于33的幂。这是布尔输出中的潜在因素吗?

此外,如果第二个表达式减去1到9,则相等性测试仅返回true。当数字> = 10时,它会正确返回false。

这可能是一个舍入错误吗?为什么这个表达式返回true?

1 个答案:

答案 0 :(得分:5)

您的计算器无法跟踪大数字。

每个计算器都有一定的精度(比方说10位数)。计算器给出的每个答案都是四舍五入的,这样答案就会有很多数字,然后它会根据需要移动小数位,以使数字变大或变小(在你的情况下非常大)。

您的号码太大,当您减去1时,会导致第10位后的更改。然后再回到你的开始,然后进行比较。很自然地,它认为它们是相同的数字(达到它能够达到的精度)。