Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Matlab Mod与Wolfram Alpha不同_Matlab_Modulus_Wolframalpha - Fatal编程技术网

为什么Matlab Mod与Wolfram Alpha不同

为什么Matlab Mod与Wolfram Alpha不同,matlab,modulus,wolframalpha,Matlab,Modulus,Wolframalpha,688^79模块3337=1570 当我在wolfram alpha尝试这个时,我得到: 但当我在Matlab中输入相同的内容时,我得到了364作为答案。我一定是做错了什么 我的计算器给我的答案与Wolfram相同,它还计算了688^79的值,因此我倾向于相信Wolfram是正确的。 您可能已经用如此巨大的数字超出了Matlab的容量,这就是为什么它没有发送正确的答案 原因是Matlab默认使用double浮点算法。688^79这样大的数字不能准确地表示为双精度。(可以准确表示为double

688^79模块3337=1570

当我在wolfram alpha尝试这个时,我得到:

但当我在Matlab中输入相同的内容时,我得到了364作为答案。我一定是做错了什么


我的计算器给我的答案与Wolfram相同,它还计算了688^79的值,因此我倾向于相信Wolfram是正确的。
您可能已经用如此巨大的数字超出了Matlab的容量,这就是为什么它没有发送正确的答案

原因是Matlab默认使用
double
浮点算法。688^79这样大的数字不能准确地表示为双精度。(可以准确表示为
double
的最大整数为)

为了获得正确的结果,您可以使用以下方法,以确保您不会失去准确性:

>> x = sym('688^79');
>> y = sym('3337');
>> mod(x, y)
ans =
1570

可能有一些溢出?可能是,让我用较小的mod(4^3,24)值运行一个快速测试。wolfram和matlab都显示相同的结果==161570是正确的(用python计算)。试试
mod(double(688^79),3337)
只要将它们存储为
sym
,您就可以正确地计算出来了。@JuanZamora“unplacer!”:-)您的示例使用的是完整的符号数学,而不是可变精度。这里似乎没有任何理由使用可变精度。将可变精度与
vpa
一起使用意味着您有一个有限但可调整的精度位数。也许我不明白你想说什么-你不会失去关于
数字的指定值的精度,但在手动情况下,你绝对可以失去相对于真实值的精度,使用
vpa
@LuisMendo检查这个:79^-1 mod 3220=1019在wolfram中。在matlab中只是返回1/79=0.0126。。。我试过象征性的是,但没有运气。@JuanZamora,这有点微妙。WolframAlpha似乎正在解决输入
79^-1 mod 3220
(解释为
PowerMod[79,-13220]
,但将解决
1/79 mod 3220
的标准余数问题(解释为
mod[79^-13220]
)@horchler你完全正确。我尝试了几件事,结果没有使用
vpa
,但解释是错误的。谢谢!我已经更正了。你的号码是14773609675417530323005367743110807899342277905621627885161356381879949959192425897722116092628218040223660252798260077567126655742028336919469799297181787089203370822514764608144873171356044647950190641152完全停止