【问题标题】:Why does my calculator return true for 2^34 == 2^34 - 1? [closed]为什么我的计算器对 2^34 == 2^34 - 1 返回 true? [关闭]
【发布时间】:2013-03-13 23:14:50
【问题描述】:

我在这里问这个问题是因为我相信这更像是一个程序问题。

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

2^34 == 2^34 - 1

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

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

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

【问题讨论】:

  • 这是一个舍入错误...
  • TI-84 不是只有 8 位精度吗?
  • ya 1.99999999999
  • 无论精度如何,计算器都应该能够将表达式简化为 (0 == 1) 并返回 false

标签: math floating-point decimal


【解决方案1】:

你的计算器无法记录这么大的数字。

每个计算器都有一定的精度等级(比如说 10 位)。计算器给出的每个答案都会四舍五入,以便答案有那么多位数,然后它会根据需要移动小数位以使数字变大或变小(在您的情况下非常大)。

你的数字太大了,当你减去 1 时,会导致第 10 位之后发生变化。然后将其四舍五入回到您开始的位置,然后进行比较。所以很自然地,它认为它们是相同的数字(达到它能够做到的精度)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-24
    • 2018-01-31
    • 2019-01-09
    • 1970-01-01
    • 2019-12-07
    • 2023-01-16
    • 2021-04-12
    • 1970-01-01
    相关资源
    最近更新 更多