jjww2999 发表于 2015-5-20 21:34:18

现在的计算器的数据精度不可信任,极少数貌似过关,有例子

大家自查下你的手头上的计算器,平常看起来很科技,可是在关键的地方,不经意间会掉链子,有可能会是个大坑呢。

如果说,计算精度只取前4位有效数字的话,那么我无话可说,所有的计算器都应该能过关。 如果精度要求更多位小数呢? {:13_340:}

cfrpg 发表于 2015-5-20 21:39:09

windows计算器表示结果和LZ相同

jjww2999 发表于 2015-5-21 10:52:10

cfrpg 发表于 2015-5-20 21:39
windows计算器表示结果和LZ相同

就因为hp39模拟器对于三角函数那是专业的精准,我才放出来给大家看看的。除了789sga,其他的计算器可就没有那么精准了,不注意的话,坑有可能大了去了。

imath 发表于 2015-5-22 14:27:26

有道理

ssk12345 发表于 2015-5-23 19:59:00

快速计算10位精度和卡成狗100位精度你要哪个?

randomzoom 发表于 2015-5-24 22:50:56

我用级数算出来
sin(51819)=sin(51819-16494*pi)=sin(1.5707716899487423) 到这里基本上没有损失精度。
=0.9999999996965129(计算过程是双精度的。取了30级级数。精度不会评估)
tan(51819)=1/sqrt((1/sin)^2-1)(之所以用这样怪异的公式,是为了减少计算步骤,提高精度。)
40589.601494761904
tan(77886622)=0.8060114916622898

等装一个linux再用bc算就更精确了。
HP干得不错。TI就不怎么样了

randomzoom 发表于 2015-5-24 22:52:59

计算器里
四则运算(+-*/)精度取决于内部位数,
三角运算取决于实现方式

randomzoom 发表于 2015-5-24 23:01:12

ssk12345 发表于 2015-5-23 19:59
快速计算10位精度和卡成狗100位精度你要哪个?

这个看运算需求了。
对一般商业,基本上不涉及三角函数,所以精度都差不多的。
科学运算中,一般会对这种tan(x->pi/2)会特别谨慎,其他的精度不会有大问题。

name:=rand() 发表于 2015-5-25 21:58:03

我倒是真的被精度坑过,那是一道题要求判断两个区间内正态分布概率是否相同,我直接用NS判断,结果false,但结果把题做错了。后来发现,两个概率是相等的,但NS因为计算精度问题,产生了1e-11左右的误差,导致NS认为左右不等,产生错解

randomzoom 发表于 2015-5-26 17:34:46

本帖最后由 randomzoom 于 2015-5-26 17:37 编辑

name:=rand() 发表于 2015-5-25 21:58
我倒是真的被精度坑过,那是一道题要求判断两个区间内正态分布概率是否相同,我直接用NS判断,结果false, ...
我其实不怎么用计算器的。
不过,学编程的时候,老师告诉我们,两个实数不要用'=='来比较,非常不可靠的,原因在于,实数不是精确数,每次计算都损失精度。一般用abs(a-b)<1e10这类来等效a==b
算tan(77886622)精度取决于两件事,第一是pi的精度,77886622/PI=2.48e7,一下子削减了8位有效数字的精度。

imasaka0 发表于 2015-5-27 18:16:57

比如这个例子:
1-0.1-0.1-0.1-0.1-0.1-0.1-0.1-0.1-0.1-0.1
=1.387778780781446e-16

cfrpg 发表于 2015-5-27 19:45:31

jjww2999 发表于 2015-5-21 10:52
就因为hp39模拟器对于三角函数那是专业的精准,我才放出来给大家看看的。除了789sga,其他的计算器可就没 ...

原来是这样,我用ns一试只有五位有效数字靠谱
页: [1]
查看完整版本: 现在的计算器的数据精度不可信任,极少数貌似过关,有例子