当采用大量类型“sym”时,Matlab双重函数输出无穷大

时间:2014-04-21 14:09:42

标签: matlab double

这实际上是我获得的数字(来自symsum函数),其类型为sym:

α= 328791078344903739363762093060350430076929707044786898291940722052812676355129485878814911641516759087483581972443760841410582114920781832660013389681326267351368505696628653562484228680842650173635989588528021721039959787053654401351638478786763875479187208098871238084448485336138651690856082810553570419028927840285091142054111375001

我想对这个数字进行数学运算(特别是采用自然对数),因此希望将其转换为double,但double(a)的输出只是" Inf"。如何解决这个问题并将其转换为" sum"到数字类型?

2 个答案:

答案 0 :(得分:1)

你的数字是~3.3x10 335 但是MATLAB的双精度​​浮点数可以表示的最大数是~1.8x10 308 (参见{的输出{1}})。将数字转换为双精度会导致溢出,因为数字大于可以表示的数字,因此MATLAB只返回realmax

有关浮点表示和算术的详尽概述,您可以查看此PDF

答案 1 :(得分:1)

在转换为double之前,你可以计算数字并插入一个小数点吗?

如果是这样,请利用溢出的数字的自然日志本身不会溢出的事实。

使用" ^"对于权力,您可以将您的号码表示为3.28791078344903739363762093060350430076929707044786898291940722052812676355129485878814911641516759087483581972443760841410582114920781832660013389681326267351368505696628653562484228680842650173635989588528021721039959787053654401351638478786763875479187208098871238084448485336138651690856082810553570419028927840285091142054111375001 * (10 ^ 335)

(10^335)的十进制日志为335。它的自然对数是335*log(10)

原始号码的自然日志是:

log(3.287910783449037393637620930603504300769297070447868982919407220528) 
+ 335*log(10)

所有输入,中间结果和此计算的最终结果都在双倍范围内。