如何在没有inf的情况下在matlab中计算指数?

rho*_*ron 5 matlab numerical numeric

标题说明了一切:我想用matlab计算一个带有大数字的指数,但是我得到了溢出,它只返回无穷大.

>> 100^1000

ans =

   Inf
Run Code Online (Sandbox Code Playgroud)

我上次检查时,100 ^ 1000明显小于无穷大:)

Div*_*kar 6

正如Daniel已经指出的那样,MATLAB本身甚至输出的数字太大了.realmax对于不同的数据类型,可以获得此数字.作为替代来表示/使用这样庞大的数字,就可以使用相应的mantissaexponentbase-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)


Dan*_*iel 5

使用64位浮点运算,100^1000inf因为它大于最大可能值.如果符号数学工具箱可用,请使用vpasym使用大数字:

sym('100^1000')
Run Code Online (Sandbox Code Playgroud)

要么

vpa('100^1000')
Run Code Online (Sandbox Code Playgroud)