TI 操作系统如何编码才能不出现浮点错误?

问题描述 投票:0回答:2

我对我的图形计算器进行了测试,以检查浮点错误,经过四十八小时的完全随机性后,计算器没有丢失任何一位数字的精度。

TI 如何实现这一目标?

floating-point floating-point-precision ti-basic
2个回答
5
投票

TI-89 和 TI-92 通过使用符号计算准确地存储值来避免错误。

实际浮点计算(89/92 上的“近似”模式)确实 有错误。它们只是更难被注意到,因为 TI 计算器显示的数字少于其存储的数字。此外,他们使用十进制而不是二进制。

例如,如果您在 TI-89 的“近似”模式下输入表达式

1/3*3-1
,您将得到答案
⁻1.ᴇ⁻14
,而不是在精确模式下得到的
0
。在内部,计算如下:

  • 1/3
    给出
    0.33333333333333
    ,四舍五入到 14 位有效数字。
  • 乘以 3 得到
    0.99999999999999
    。由于四舍五入,这显示为
    1.
  • 减去 1 得到
    -0.00000000000001
    ,或 -1e-14。

0
投票

在流行的 TI-84+ 计算器上实际上存在一些精度误差,尽管它没有其他平台那么突出。

例如:在 JavaScript 和许多其他使用 IEEE-754 二进制浮点的著名编程语言中,

0.1+0.2

 将导致 
0.30000000000000004
。这个特殊的例子在 Texas TI 计算器上并不是一个突出的问题,因为它们使用以 10 为基数的格式,而不是以 2 为基数。

但是,TI-84+ 仍然存在精度问题,例如来自

TI Basic Wiki 的示例:

注意精度问题

1/3*3→X // X is expected to be 1 X // Displays 1, but is actually 0.99999999999999 in memory iPart(X) // Displays 0 fPart(X) // Displays 1, but is actually 0.99999999999999 in memory
有点不直观的是,上面的代码显示结果 1、0 和 1。这是因为计算器将值存储为 14 位精度,但将值四舍五入到 10 位以适合主屏幕。因此,

fPart()

 可能会返回 1 或 -1 的值。

提示: 如果您在列表编辑器屏幕中输入一个值,您将能够看到所有 14 位精度。这可以帮助您解决此类问题。

一种解决方法是在调用

iPart()

fPart()
 之前对数字进行四舍五入,如果您不介意精度从 14 位有效数字到 9 位小数的轻微损失:

1/3*3→X iPart(round(X,9)) // Displays the expected result 1 fPart(round(X,9)) // Displays the expected result 0
(这里从技术上讲,参数 9 不是必需的,因为 9 是默认值,但为了清晰起见,并且在您想要自定义精度级别时显示该参数。)

© www.soinside.com 2019 - 2024. All rights reserved.