这是怎么回事?
mathematica吧
全部回复
仅看楼主
level 7
Wonderlands0 楼主
Plot[{(1 + 1/n)^n, E}, {n, 1, 10000000}]
然后往10000000上多加一个零,就出错了:
2015年10月20日 12点10分 1
level 4
设置 WorkingPrecision 选项可以解决问题:
Plot[{(1 + 1/n)^n, E}, {n, 1, 100000000}, WorkingPrecision -> 20]
有意思的是即使将 20 换成 1 仍然可以给出相同的结果。原因可能是因为 Mathematica 对机器精度采用了特殊的算法。
2015年10月20日 13点10分 2
WorkingPrecision 是正解[大拇指],我刚看了它的帮助文档,里面就有个类似的例子。等于1那个是有些奇怪。
2015年10月21日 02点10分
level 6
数值误差;当n很大时,1+1/n中的1/n实际上精度很低。
2015年10月20日 15点10分 4
你这个说得确切[开心],1/n的精度。我就觉得是精度问题,还猜是不是什么什么溢出了。
2015年10月21日 02点10分
level 7
Wonderlands0 楼主

当n取值更大时,比如10^17:
Plot[{(1 + 1/n)^n, E}, {n, 1, 10^17}, PlotRange -> {0, 3}]
1/n会由于精度问题等于0,这样这个函数在n=2*10^16后面就都等于1。
2015年10月21日 02点10分 5
图见8楼
2015年10月21日 09点10分
level 11
学数值分析时碰到过,matlab波动出现得更早,并且n再加大,1/n会变成0,就没有波动了。
2015年10月21日 06点10分 6
我正想知道这个在matlab上算会怎样,我这儿没有matlab。[哈哈]
2015年10月21日 09点10分
就是你画的那个图,就是波动部分更密集
2015年10月21日 15点10分
吧务
level 12
@xzcyr 这个贴子加个精吧 这种东西确实有点防不胜防的 至少mma对此还不是自适应啊
2015年10月21日 06点10分 7
[哈哈]
2015年10月21日 09点10分
其实MMA对此是有一些努力的,只是还不够……链接……我现在来不及发了……
2015年11月07日 15点11分
好的,现在补个链接吧。其实,Mathematica在一些极端情况下是知道自己升高精度的,即使你的输入用的是机器精度。这是一个例子:http://mathematica.stackexchange.com/q/24857/1871
2015年12月05日 12点12分
@xzcyr 吧主威武 [酷]
2015年12月05日 12点12分
level 7
Wonderlands0 楼主
2015年10月21日 09点10分 8
level 7
那么请问mma默认的WorkingPrecision的位数是多少呢?
2019年01月23日 04点01分 10
2019年01月23日 12点01分
默认是“机器精度”,一般是按IEEE 754的规定来的,比如64位下的十进制计算精度是53lg(2)。
2019年01月24日 03点01分
@magus000 53*lg(2)?就是精确到小数点后面第16位?
2019年01月24日 03点01分
@magus000 请问是这个意思么[托腮]
2019年01月24日 07点01分
1