gpt4 book ai didi

precision - 避免精度损失的最佳算法?

转载 作者:行者123 更新时间:2023-12-03 01:48:50 27 4
gpt4 key购买 nike

我最近收到的一项家庭作业要求我们采用在计算机中执行时可能会造成精度损失的表达式,并对其进行更改以避免这种损失。

不幸的是,执行此操作的指示尚未非常明确。通过观察各种正在执行的示例,我知道有一些方法可以做到这一点:使用泰勒级数,如果涉及平方根则使用共轭,或者在两个分数相减时找到公分母。

但是,我很难准确地注意到何时会发生精度损失。到目前为止,我唯一确定的是,当您减去两个接近相同的数字时,会发生精度损失,因为高位数字很重要,并且您会因四舍五入而丢失这些数字。

我的问题是我应该寻找哪些其他常见情况,以及什么被认为是解决这些问题的“好”方法?

例如,这里有一个问题:

f(x) = tan(x) − sin(x)  when x ~ 0

从这三个选择中评估此问题的最佳和最差算法是什么:

(a) (1/ cos(x) − 1) sin(x),
(b) (x^3)/2
(c) tan(x)*(sin(x)^2)/(cos(x) + 1).

我知道当 x 接近于零时,tan(x) 和 sin(x) 几乎相同。我不明白这些算法如何或为何在解决问题方面更好或更差。

最佳答案

通常使用的另一个经验法则是:当添加一长串数字时,从最接近零的数字开始添加,并以最大的数字结束。

解释为什么这很好有点棘手。当您将小数字添加到大数字时,它们有可能被完全丢弃,因为它们小于大数字当前尾数中的最低数字。以这种情况为例:

a = 1,000,000;
do 100,000,000 time:
a += 0.01;

如果 0.01 小于最低尾数,则循环不执行任何操作,最终结果为 a == 1,000,000但如果你这样做:

a = 0;
do 100,000,000 time:
a += 0.01;
a += 1,000,000;

随着较低的数字慢慢增长,您最终更有可能得到接近 == 2,000,000 的值,这是正确的答案。
这当然是一个极端的例子,但我希望你能明白。

关于precision - 避免精度损失的最佳算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/502122/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com