【问题标题】:How can I calculate 10^400, without MATLAB returning "inf"?如何在 MATLAB 不返回“inf”的情况下计算 10^400?
【发布时间】:2015-10-15 20:17:25
【问题描述】:

我正在处理非常大的数字,规模为10^500,10^800。 当我尝试计算 10^309 时,它会返回 inf

>> 10^309
ans =
   Inf

我测试了format long,它也返回了inf

>> format long 
>> 10^309
ans =
   Inf

我还测试了vpa函数:

vpa(10^309,309)
ans =
    Inf

如何在计算中计算和使用大数字? 我不能使用对数,因为我需要非常大的数字中的所有数字。即我希望 MATLAB 为 10^308 返回以下内容

vpa(10^308,308)
    ans =
100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

谁能帮我做这个?

【问题讨论】:

  • 您是否认为您想要的数字实际上可能对于任何明智的计算机都无法表示?
  • 你能改变你的值的单位吗,例如,从纳米到光年?
  • IKavanagh 我想尽可能使用 matlab。
  • rayryeng,你是对的,我可以用于计算机的最大数字是多少,你知道吗?我可以通过创建一个 c++ 函数来计算这个大数字
  • 关于你最后的评论,这个问题已经被问过了,并且有一个非常有趣的答案和文章链接到它here

标签: matlab calculus


【解决方案1】:

您仍然可以使用可变精度算术模块vpa。只需确保将指数放在vpa 调用的外部

>> A = vpa(10)^400

A =

1.0e400

【讨论】:

  • 感谢 rayryeng,我当然需要数字,但我不能使用 1.0e400
  • 无论如何,非常感谢,特别介绍realmax
  • @stackprogramer 我的荣幸。
【解决方案2】:

您可以查看 MATLAB 文件交换中的 Variable Precision Integer Arithmetic 库。其使用示例如下:

>>> A = vpi(17)^17 
ans = 
827240261886336764177

>>> 17 + A^17 
ans = 
39786732894291535047752038041559739510060813980024082 
30012867731573722066105737100731556603857745946047229 
53759676529121155309750944582301597489457676380805029 
59227566911971103003303064782118652210655457390045806 
99039190393572334521701109889855832341416056005878848 
49943142324389193616484809157960034059531548585473213 
36465170635561696613297503569949729314 

这似乎是你想要的。

【讨论】:

  • 我运行这个有错误! >> A = vpi(17)^17 ans = 827240261886336764177 未定义的函数或变量“vpi”。 >> factorial(vpi(171)) 未定义的函数或变量'vpi'。
  • 您下载提交的文件夹是否在您的 matlab 路径中?一个简单的解决方法是将下载的文件直接解压缩到您正在运行的脚本的文件夹中
  • @brodroll 它有效,我将它复制到路径并非常感谢 A = vpi(17)^17 A = 827240261886336764177
  • 它的工作原理nice.A = VPI(10)^ 309 A = 10000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000 跨度>
  • 但为此它有错误: vpi(4222)*45555555555555555555555555555555 使用 vpi 时出错(第 160 行)如果 N 是双精度,它可能不大于 2^53 - 1 .* 中的错误(第 79 行)INT1 = vpi(INT1); * 中的错误(第 27 行)INT = INT1.*INT2;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-24
  • 2013-02-07
  • 1970-01-01
相关资源
最近更新 更多