rho*_*ron 5 matlab numerical numeric
标题说明了一切:我想用matlab计算一个带有大数字的指数,但是我得到了溢出,它只返回无穷大.
>> 100^1000
ans =
Inf
Run Code Online (Sandbox Code Playgroud)
我上次检查时,100 ^ 1000明显小于无穷大:)
正如Daniel已经指出的那样,MATLAB本身甚至输出的数字太大了.realmax对于不同的数据类型,可以获得此数字.作为替代来表示/使用这样庞大的数字,就可以使用相应的mantissa和exponent与base-10 representation代替,这是通常的MATLAB表示.这里列出了获取这两个的功能 -
function [mantissa, base10_exponent] = base10_mantissa_exponent(base,exponent)
act_exp = exponent*log10(abs(base));
base10_exponent = floor(act_exp);
mantissa = power(10,act_exp - base10_exponent);
if rem(exponent,2)==1 && sign(base)==-1
mantissa = -mantissa;
end
return;
Run Code Online (Sandbox Code Playgroud)
下面列出了几个示例运行并与用于验证的实际MATLAB运行进行比较.
前#1
base = -125.343;
exponent = 101;
usual_approach = base^exponent
[mantissa, base10_exponent] = base10_mantissa_exponent(base,exponent)
Run Code Online (Sandbox Code Playgroud)
输出 -
usual_approach =
-8.0930e+211
mantissa =
-8.0930
base10_exponent =
211
Run Code Online (Sandbox Code Playgroud)
例#2(问题中讨论的问题)
base = 100;
exponent = 1000;
Run Code Online (Sandbox Code Playgroud)
输出 -
usual_approach =
Inf
mantissa =
1
base10_exponent =
2000
Run Code Online (Sandbox Code Playgroud)
使用64位浮点运算,100^1000是inf因为它大于最大可能值.如果符号数学工具箱可用,请使用vpa或sym使用大数字:
sym('100^1000')
Run Code Online (Sandbox Code Playgroud)
要么
vpa('100^1000')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2581 次 |
| 最近记录: |