救救救!大佬们,关于小数的指数计算问题
mathematica吧
全部回复
仅看楼主
level 4
TaengYa 楼主
最近在计算指数很小的EXP的时候,发现了当指数为小数时,计算结果自动归零的问题,有没有大佬给解答一下该怎么办。代码:Exp[N[-784.983,$MachinePrecision]]Exp[N[-800,$MachinePrecision]][图片]
2022年05月23日 07点05分 1
level 4
TaengYa 楼主
图片怎么没了
2022年05月23日 07点05分 2
吧务
level 10
这是一个比较常见而隐晦的问题。N不会从机器精度浮点数转化出任意精度数,你可以写成
Exp[-800`10]。
2022年05月23日 13点05分 4
大佬好,但如果我要计算的是一个函数该怎办呢?自定义的函数,里面存在这样的小量,我该如何对整个函数做操作呢
2022年05月23日 19点05分
@TaengYa Hold@Exp[-800.] /. n_Real?InexactNumberQ :> N[Rationalize[n, 0], 10] // ReleaseHold
2022年05月26日 07点05分
@asdasd1dsadsa 好的,大佬我试试
2022年05月27日 06点05分
吧务
level 15
该说的4楼基本都说了,小结下:
1. N无法提升精度,而MachinePrecision精度优先级默认最低。
2. 强制升精度可以用SetPrecision或者Rationalize。不过更合理的做法是在计算的
一开始就把精度处理好。大型数值计算函数一般都会有个WorkingPrecision选项的。
3. General::munfl 警告很多时候不一定是个问题,很多时候我们就是希望Exp[-800]这样的式子近似为0,当然这样具体问题具体判断。
4. 其实Mathematica早期版本在计算Exp[800.]这样的式子时是会自动升精度的,但是这个设计有它的缺点(某些场合严重拖慢计算速度),所以后来取消了。想了解更多可以去Stackexchange搜搜关于这个警告的问题,链接不贴了,怕被吞。
2022年06月04日 03点06分 7
OK,感谢大佬
2022年06月04日 06点06分
1