这实际上是我获得的数字(来自symsum函数),其类型为sym:
α= 328791078344903739363762093060350430076929707044786898291940722052812676355129485878814911641516759087483581972443760841410582114920781832660013389681326267351368505696628653562484228680842650173635989588528021721039959787053654401351638478786763875479187208098871238084448485336138651690856082810553570419028927840285091142054111375001
我想对这个数字进行数学运算(特别是采用自然对数),因此希望将其转换为double,但double(a)的输出只是" Inf"。如何解决这个问题并将其转换为" sum"到数字类型?
答案 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)
所有输入,中间结果和此计算的最终结果都在双倍范围内。