当前位置:  开发笔记 > 人工智能 > 正文

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

如何解决《避免精度损失的最佳算法?》经验,为你挑选了1个好方法。

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

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

但是,我很难注意到何时会发生精度损失.到目前为止,我唯一确定的是,当你减去两个接近相同的数字时,由于高阶数字很重要,你会失去精确度,而你会因为四舍五入而失去精确数字.

我的问题是我应该寻找的其他常见情况,以及接近它们的"好"方法是什么?

例如,这是一个问题:

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)几乎相同.我不明白为解决这个问题,这些算法中的任何一个或更好的方式或原因.



1> shoosh..:

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

解释为什么这是好的是abit棘手.当你为一个大数字添加小数字时,它们有可能被完全丢弃,因为它们小于当前大数字尾数中的最小数字.比如这种情况:

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

如果0.01小于最低的尾数,那么循环什么都不做,最终结果是== 1,000,000,但如果你这样做:

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

比较低的数字慢慢增长,你更有可能最终得到接近== 2,000,000的东西,这是正确的答案.
这是一个极端的例子,但我希望你能得到这个想法.

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有