图片缩略图

可变精度整数运算

版本1.45 (2.86 MB) 约翰D 'Errico
与完全任意大小的整数运算。数组和支持向量的新品数量。金宝app

66下载

更新2015年1月27日

视图版本历史

查看许可协议

编者按:这个文件被选为MATLAB中央选择的

每隔一段时间,我想做算术与大整数大小超过可适应MATLAB的标准数据类型。因为我没有符号工具箱,简单的解决方案是用MATLAB写出来。我在这些工具完全是用MATLAB编写的,所以不需要编译的代码。
算术与新品简单工具。
=新品(17)^ 17
ans =
827240261886336764177

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

也有一些不错的附加元件,例如一个工具来计算准确的二项式系数对大参数,或者大的阶乘,与数千位二进制数转换成十进制(新品)形式。

例如,现有nchoosek函数在matlab会心烦意乱甚至相当小的二项式系数。

nchoosek(100年,50)
警告:结果可能不准确。系数大于1.000000 e + 15
只精确到15位数。
在nchoosek > 66
ans =
1.0089 e + 29

然而,nchoosek新品数量上没有这样的问题。

nchoosek(新品(100)、50)
ans =
100891344545564193334812497256

同样,计算阶乘(171)将导致溢出。虽然我承认有许多好方法避免这个问题,factvpi功能没有问题。

阶乘(171)
ans =

阶乘(新品(171))
ans =
12410180702176678234248405241031039926166055775016931
85388951803611996075221691752992751978120487585576464
95950167038705280988985869071076733124203221848436431
04735778899685482782907545415619648521534683180442932
39598173696899657235903947616152278558180061176365108
428800000000000000000000000000000000000000000

现在有肾小球囊性肾病和LCM工具,这两个可以接受超过两个输入参数。

lcm(新品(123452356)、12344332、12344332)
ans =
3557547184310976844988

我也在一些原始的工具,可以测试。例如,梅森素数:

p =新品(2)^ 127 - 1
ans =
170141183460469231731687303715884105727

isprime (p)
ans =
1

保理的新品数量已经实现。

因子(新品(' 1234567890123456789 '))
ans =
3 3 101 3541 3607 3803 27961

向量或数组的新品数量现在工作得很好。

=新品(眼(3))* 3 + 1
一个=
4 1 1
1 4 1
1 1 4

^ 17
ans =
5642305908354 5642176768191 5642305908354
5642176768191 5642305908354 5642176768191
5642176768191 5642176768191 5642176768191

还包括许多其他工具。我甚至包括工具只是为了好玩,将数字转换成一个可读的文本版本的一个大整数。

vpi2english(新品(' 12000000110022987 '))
ans =
一亿亿二千万亿,一百亿零一千万,二万二千,九百八十七

对于那些项目欧拉动力学,新品使的许多问题容易解决。

附录-本Petschel施恩给我代码独特而sortrows新品数组的操作。感谢本!

引用作为

约翰D 'Errico (2021)。可变精度整数运算(//www.tatmou.com/matlabcentral/fileexchange/22725-variable-precision-integer-arithmetic), MATLAB中央文件交换。检索

评论和评级(190年)

mikalai dzedovich

埃米尔哈姆萨

Zhenquan张

Syed Asra

有人能帮助我在执行Bitxor和其他新品上逐位操作数?

Syed Asra

还当我试图执行新品(a) /新品b > a (b),我得到0。为什么?

Kottipadannayil索曼

Donguk崔

请更新以下。

的因素。线185
“randint”已经被移除。使用“兰迪”代替。

X1 = 2 + randint (INT-3, 1);

Leshun徐

我试着
一个=新品(13)^ 3;
^ (1/3)

答案是1。剂量谁知道13怎么走吗?

马库斯

我发现我自己的解决方案。它是基于约翰的评论如何使用disp char()将新品。逻辑如下:

一个=新品(2);
b =新品(3);
c = 10 ^ 15 * a / b;
d = disp (c);
e = str2double (d);
f = e / 10 ^ 15;

任何改进的建议将不胜感激。

马库斯

哇,我只是在敬畏!

我有一个小问题。我有两个新品,a和b,我需要计算a / b。结果将在区间(1,1),并与一些我需要精确,最好是双或高通滤波器。

任何建议我可以这样做吗?

Akram Choukri

如何将新品十六进制

sittichoke som-am

我不能使用新品(2)^ 2,新品(2)+ 5。为什么?

Shounak Das

我有一个问题. .我得到一个错误在运行Fibonacci数组:
斐波纳契(施用)
不同类型之间的分配是不允许的。
错误在斐波纳契(第130行)
Fn (i) = Fseq (n(我)+ 1);

埃里希

Shounak,不,你不应该添加一个“@”文件夹到MATLAB路径。只包含“@”文件夹的文件夹应该的道路上。看到//www.tatmou.com/help/matlab/matlab_oop/organizing-classes-in-folders.html

Shounak Das

我不该@vpi文件夹添加到新品的matlab路径函数的工作吗?

Shounak Das

将如何使用函数如果我不添加Matlab将它们添加到搜索路径?如果我添加到路径然后阴影具有相同名称的其他功能。

埃里希

韦恩和尼尔,
是的,MATLAB的符号数学工具箱R2018a引入了一个新函数的powermod阴影新品的版本。解决方案是将新品的powermod @vpi目录,MATLAB调用新品版本如果新品对象的任何参数。

之前新品powermod:
> > isprime(新品(2)^ 32 + 1)
错误使用powermod(15行)
预期的输入这些类型之一:

数字

相反,它的类型是新品。
误差在新品/ isprime(第186行)
x = powermod (a、d N);

移动新品powermod后:
> > isprime(新品(2)^ 32 + 1)
ans =
逻辑
0

Aloshious丁家宜

也为INT =新品(15)^ 12

本Mimay

韦恩,

我相信这只是一个问题与你的路径。有两个函数称为powermod,一个符号数学工具箱和一个提交。使用“- powermod”。新品功能是最有可能的阴影。

韦恩小腿

在Matlab2018a问题?
isprime (X), X是一个新品> 2 ^ 32导致一个错误(2016 b在matlab文件)

> > isprime(新品(2)^ 32 + 1)
错误使用powermod(15行)
预期的输入这些类型之一:

数字

相反,它的类型是新品。

误差在新品/ isprime(第186行)
x = powermod (a、d N);

卢卡斯

好了!我需要创建non-vpi iszero函数变量。但我认为这是由于缺少符号工具箱在我的例子中。

函数[b] = iszero (n)
% UNTITLED总结的这个函数
%的详细解释
b =布尔(n = = 0);

结束

否则我收到了错误:
> > b =新品(' 5 ')
> > b * 2
未定义的函数“iszero”“双”类型的输入参数。

错误。*(49行)
如果iszero (INT1) | | iszero (INT2)

错误*(27)行
INT = INT1。* INT2;

保罗丰特

补充

函数十六进制= vpi2hex (INT, n)
十六进制= vpi2base (INT, 16);
如果输入参数个数= = 2
十六进制= [0 (1,n-numel(十六进制))十六进制);
结束
X = ' 0123456789六边形abcdef ';
十六进制= X(十六进制+ 1);

保罗丰特

一个小助手大十六进制字符串转换为新品。(或者它已经和我找不到如何使用?)

函数INT = hex2vpi(十六进制)
X =南(55);
X (1:10) = 0:9;
X (23) = 15;
X (50:55) = 15;
我=十六进制- ' 0 ' + 1;
INT = base2vpi (X(我),16);

pulengmoth

Mohsin沙

我写的代码Paillier密码系统的图像加密。Paillier加密的加密是这样的:C =(新品(g) ^ pixelvalues) *新品(r) ^ N mod N ^ 2,其中N是大量。C合成的图像显示在工作区中我的MATLAB 256 x256新品(256 x256图片尺寸)。当我使用imshow查看加密图像C, MATLAB给出了这个错误:
错误使用imageDisplayValidateParams
预期的输入数字1,我是其中的一个类型:
数字、逻辑
相反,它的类型是新品。

如何显示图像处理新品?

Mohsin沙

保罗

1月员工

我一直在使用这个工具为教学目的。非常感谢优秀的工具,matlab演示对OO编程。一个小问题,尽管(不确定其他地方联系):
> > nextprime(新品(2)^ 78)
错误使用nextprime(第90行)
N的最大值(数字输入)允许是2 ^ 46。

isnumeric返回true新品但是nextprime给了一个错误的大型数字输入。我犯了一个愚蠢的错误?“修复”很容易,但我希望学生下载新品直接从文件交换。

大卫•布莱克

啊对不起,我不是构建新品变量!愚蠢的新手的错误。

如此:

INT =新品(“920314723904709”)
INT2 =新品(123498374987439873”)
INT3 = INT + INT2

我删除我的评论如果我能早些时候(多么尴尬!),但我看不出怎么做!

大卫•布莱克

你好,我是一个新用户MatLab。我看不出如何使用这段代码。所有我想做的是加2大整数。整数的字符串格式。

所以我有:

INT = ' 920314723904709 '

INT2 = ' 123498374987439873 '

INT3 = INT + INT2

我得到一个错误消息说:

错误使用+
矩阵维度必须一致。

我失踪吗?

阿拉法特Asghar

约翰伟大的工作。坚持下去。有什么方法我可以新品数量转换为字符串?

aiman萨德

你是了不起的,非常感谢你,你是怎么做到的? ? ? ?

约翰D 'Errico

我不可能说得比埃里希。这也许是最常见的错误,我看到人们没有认识到当一个中间计算的两倍,而新品(或高通滤波器,为我的其他高精密工具。)

埃里希

约翰,

错误消息应该给你一个线索:17 * 17 *……* 17都是双精度进行,所以由此产生的“整数”不能准确地用双精度。试试这个:

B =新品(17)^ 17
> > B /(新品(17)* 17 * 17 * 17 * 17 * 17 * 17 * 17 * 17 * 17 * 17 * 17 * 17 * 17 * 17)
ans =
289年

铸造第一个17到新品会引起进一步的乘法转换为新品,所以生成的整数是恰当的。

这是另一个提示:
> >新品(17 * 17 * 17 * 17 * 17 * 17 * 17 * 17 * 17 * 17 * 17 * 17 * 17 * 17 * 17)
错误使用新品(第160行)
如果N是双重的,它不可能大于2 ^ 53 - 1

约翰BG

你好先生D 'Ericco

我得到一个错误当试图达到17从17 ^ 17:

> > B =新品(17)^ 17
B =
827240261886336764177

> > B / (17 * 17 * 17)
ans =
168377826559400929
> > B / (17 * 17 * 17 * 17 * 17 * 17)
ans =
34271896307633
> > B / (17 * 17 * 17 * 17 * 17 * 17 * 17 * 17 * 17)
ans =
6975757441
> > B / (17 * 17 * 17 * 17 * 17 * 17 * 17 * 17 * 17 * 17 * 17 * 17)
ans =
1419857
> > B / (17 * 17 * 17 * 17 * 17 * 17 * 17 * 17 * 17 * 17 * 17 * 17 * 17 * 17 * 17)
错误使用新品(第160行)
如果N是双重的,它不可能大于2 ^ 53 - 1
新品/误差系数(第135行)
分母=新品(分母);
错误/(41)行
Q =商(分子、分母);

不能站直没有返回错误直到17次17吗?

谢谢你的时间和注意力
等待回答

约翰
jgb2012@sky.com

看到长黄

约翰D 'Errico

我从来没有使用仿真软件,我也没有金宝app仿真软件来测试它。我只能推测如果其他有仿真软件MATLAB功能,那么新品同样工作。金宝app

selcuk卡

我可以在仿真软件中使用它吗?金宝app

萨米尔Afefa阿斯利

Yu和棕褐色

做得好!谢谢你分享这个很棒的包!

广西刘

还Biguri

Poorren

干得好!

约翰D 'Errico

如果你有一个情况的算法我曾经失败,请寄给我。

p =新品(' 124233534465235455634245356345246456233758457665875654647634645745657567464774575875658845645746364745747465766463352435473 ');

现在,广场。

p2 p = p *
p2 =
15433971085724845807529053262922462001895202948051311590074369833049
509154900758731761178232321235094091820663015565827704498284337773042059
357095682140561450981630534851931113170834845007762750960372854097063386
898516121202278514094760628733729

然后形成了平方根。

q = sqrt (p2)
q =
12423353446523545563424535634524645623375845766587565464763464574565
7567464774575875658845645746364745747465766463352435473

p - q
ans =
0

如您所见,它发现确切的平方根,使用合理的和有效的方法。

约翰Klempir

是否有办法让它来计算准确的平方根?我有一个完美的平方,但整数大代码甚至不尝试一个精确的平方根?

埃德加Zakarian

你好,
是否可以使用逻辑函数(XOR,或)新品数量?我需要做这样的操作在密码学操作数的大小都是192位的。谢谢。

约翰D 'Errico

当然这是免费的。文件交换提供了工具,为您的使用是免费的。新品不直接与MATLAB,因为它是由一个第三方写的。在这种情况下,我是第三方。

只是下载,安装指导,然后使用它,享受它。

赛斯Wagenman

这是免费下载吗?R2014a我使用没有新品显然……

约翰D 'Errico

你好尼古拉斯,

新品使用波拉德ρ分解算法。虽然是明显好于MATLAB工具安装在内部的因素,它只能处理数字10位数左右一样大,我使用的方案往往是无效的数字,两个严重大质数的乘积。当然,这是一个困难的问题在一般情况下,其他的许多常用的加密方案今天会失败。

我的一个目标已经重写因素使用一个更好的方案,但在那之前我应该放在一个警告消息当因素未能解决合成数完全为其主要因素。

你没有做错任何事情,除了给因素数量太大处理。

尼古拉斯rosselot

嗨。

首先,伟大的工具!

第二,我做错了什么?

> > p1 =新品(“40094690950920881030683735292761468389214899724061”)
p1 =
40094690950920881030683735292761468389214899724061
> > p2 =新品(“37975227936943673922808872755445627854565536638199”)
p2 = 37975227936943673922808872755445627854565536638199

> >因子(p1 * p2)
ans =
1522605027922533360535618378132637429718068114961380688657908494580122963258952897654000350692006139

它应该给p1和p2…

谢谢!

埃德加Zakarian

埃德加Zakarian

谢谢先生。
如果有人有兴趣,我回答我的问题在仿真软件中使用新品(见下文)发表评论。金宝app我新品的数字转换成一个矩阵的比特(实际上有些存储在双)。

下面是步骤:
种子=新品(“123456789”)
N0 = randint(新品(种子),[1])
N1 = vpi2bin (N0) %新品从十进制转换为二进制形式
N2 = [N1 - ' 0 '] %将数字转换成字符串(向量)
N3 = vec2mat (N2, 8) % 8列向量转化为矩阵。

约翰D 'Errico

N =新品(' 123456789012345678901234567890 ');

vpi2bin (N)
ans =
1100011101110100100001111111101101100001101110011111000001110111001001110001111110000101011010010

我想在事后,我应该使用dec2bin正如它的名字。

埃德加Zakarian

你好,
我怎么能把二进制的新品数量吗?
谢谢。

朱塞佩·卡迪罗

亲爱的约翰,
我看到你使用Miller-Rabin算法测试原始。首先考虑已知强烈pseudoprimes 9 '基地(http://arxiv.org/pdf/1207.0063.pdf),我建议实现加快你Miller-Rabin算法:

如果N < 2047
目击者= 2;
elseif N < 1373653
目击者= [2 3];
elseif N < 25326001
目击者= (2 3 5);
elseif N < 3215031751
目击者= [2 3 5 7];
elseif N < 2152302898747
目击者= (2 3 5 7 11);
elseif N < 3474749660383
目击者= (2 3 5 7 11 13);
elseif N < 341550071728321
目击者= (2 3 5 7 11 13 17 19);
elseif N < 3825123056546413051
目击者=[2 3 5 7 11 13日17日19日23);
其他的
目击者=[2 3 5 7 11 13日17日19日23日29日31日37);
结束

问候

约翰D 'Errico

嗨Suma,

我记得几天前看到这个同样的问题在一些论坛。答案也许是,但我不会去寻找它。那里的反应告诉你,这个问题是浮点运算。

无论如何,你试图解决一个浮点问题整数算术工具。也许你需要考虑,有一个问题,整个想法。我不知道回答你期望看到的计算。

更糟的是,问题不在于即使eig,但仍然与你的浮点运算的理解。(请别扔这个同样的问题在我的高通滤波器的工具,因为它也不会解决这个问题。)

所以。事实是,它看起来像你有一个奇异矩阵。浮点垃圾桶蠕变的像这样的问题产生负数,对eps的顺序。把随机代码的结果eig不会解决这个问题通过增加MATLAB的精度。

然而,如果你知道特征值不能为负数,那么为什么不使用马克斯?(顺便说一句,请不要再问这个问题,我不做评论的咨询我的代码,尤其是当问题没有关联我的代码)。

Suma

你好,

我有一个2 x2矩阵a,其特征值返回我- 0,-
-0.000000000000000和-0.000000000000000
1.000000000000000 - 0.999999999999999

所以我决定尝试新品的功能很像
λ(:,k) =新品(eig ((:,:, k)))

但这我错误消息返回

警告:真正的浮动一个新品整数形式转换
在新品>。新品at 172
在新品。新品at 138

显然我的新品实现是错误的。新品可以在这种情况下使用?

jean - luc

埃德加,

我怀疑是仿真软件工具箱上调用金宝appisnumeric新品对象。isnumeric尽量文件。与类似米@vpi文件夹:

函数val = isnumeric (INT)
val = true;

jean - luc

Tetef

约翰D 'Errico

埃德加-我很抱歉,但是我仿真软件一无所知,所以我不能提供帮助。金宝app也许别人可以这么做,或者你可以联系MathWorks和问他们。

埃德加Zakarian

你好,
D 'Errico先生感谢分享,
任何人如果我可以问一个问题:在仿真软件中,当我使用一个嵌入式MATLAB函数,我叫另一个金宝app函数,输出一个新品数量(Z),我总是得到以下错误:“MATLAB函数接口错误:MATLAB表达式' Z '不是数字。”我应该做些什么来避免这个错误吗?我仍然需要一个新品数量的函数。
谢谢。

Cavin Dsouza

非凡的先生

jean - luc

嘿,约翰:谢谢你在最新版本中实现最小和最大!

Shiuan-Tzuo沈

好提交!
建议的实现产生随机数Z_p ^ *, p是一个新品的数字。谢谢!

约翰D 'Errico

你安装它以同样的方式你会安装任何其他FEX提交。相同的Windoze或任何操作系统。解压zip文件,然后将顶层目录(VariablePrecisionIntegers)在你的搜索路径。

Fogato Abbestia

我如何在windows上安装它?我有matlab 2008 b 64位,谢谢。

约翰D 'Errico

哦。固定totient(1) &上传。

骑自行车的人

伟大的提交。我很少使用它,但这是一个生机,当我需要它。

我找到了一个小缺点,我相信。totient函数输出totient(1)为0,但维基百科页面引用和斯隆的在线百科全书的整数序列(http://oeis.org/A000010)说totient (1) = 1。

托马斯寻欢

我使用素数分解。工作好了!

赛斯Kosowsky

谢谢你约翰。我按预期实现w / repmat和速度的损失是巨大的。不过,我没有其他的方法这个问题(发现n位数字与独特的数字和特殊的可分性base-n属性)以上基地13。而repmat很慢,新品做它的工作。

我也可能建议未来工作同等“isvpi”功能。

再次感谢。
赛斯

约翰D 'Errico

据我所知,bsxfun不会使用这些工具。这个工具是脱离我的控制,编译后的代码。我想我可以超载bsxfun新品,但有很多bsxfun FEX替代品。其中一个可能的工作,只要是写给数组的一个通用类,支持加法和乘法。金宝app

你可以只使用repmat为了解决这个问题,尽管它不会提供任何获得速度,因为它将bsxfun避免分配额外的内存。

最后,一个新的的可能性,更快的版本的新品是在地平线上。

赛斯Kosowsky

有可能让bsxfun与新品工具箱?当我盲目尝试,matlab报告bsxfun为新品类型未定义。

谢谢。

凯文

朱利诺

伟大的质量,很容易集成。今天我需要检查一些病菌,可能与缺乏精度标准的数值类型,和新品做这项工作。

凯文

谢谢你约翰!

约翰D 'Errico

对不起,我不做咨询的评论提交,否则这些东西永远继续下去。更重要的是,这很大程度上似乎是某种形式的作业,我不做家庭作业。我只会重复我的最后一条语句,分析总是胜过蛮力。至少,它会让你减少你的搜索空间。我已经给了你一个提示。花一些时间用铅笔和纸,在你扔蛮力搜索问题。

凯文

我试过用“圆sqrt(临时工)= =√(临时工)”作为完全平方准则,但最终获得一些伪解m = 17很快没有任何警告消息。金宝搏官方网站

凯文

我现在使用%代码,但是它不适合m = 11
关闭所有
清晰的
clc
N = 1 e7;
结果=新品(0 (1、2));
数量= 0;
test256 = [0、1、4、9、16、17、25、33; 36; 41; 49; 57; 64; 65; 68; 73; 81; 89; 97; 100; 105; 113; 121; 129; 132; 137; 144; 145; 153; 161; 164; 169; 177; 185; 193; 196; 201; 209; 217; 225; 228; 233; 241; 249);
test10 = [0, 1, 4, 5, 6, 9];
test05 = (0、1、4);
test07 = [0, 1, 2, 4];
test09 = (0、1、4、7);
test13 = [0, 1, 3, 4、9、10、12);
test17 = [0, 1, 2, 4, 8、9、13; 15、16);

抽搐

2 = 2:N
如果计数> 0
打破
结束
jj = 1: ii-1
如果计数> 0
打破
结束
临时工= (2 * jj) * (2 + jj) * (ii-jj) / 11;% m。

如果轮(临时工)= =临时工
如果~ isempty(找到(test256 = =国防部(临时工,256)))
如果国防部(临时工,3)< 2 & & (mod(临时工,5)< 2 | |国防部(临时工,5)= = 4)
如果~ isempty(找到(test10 = =国防部(临时工,10)))| | (mod(临时工,4)< 2)
如果~ isempty(找到(test17 = =国防部(临时工,17)))
如果~ isempty(找到(test13 = =国防部(临时工,13)))
如果~ isempty(找到(test09 = =国防部(临时工,9)))
如果温度> 1 e10
(根,过量)=√新品(临时工));
其他的
xxx(12(临时工);
= xxx-round过剩(xxx);
结束
如果超过0% = = isSqr(临时工)%国防部(临时工,临时工)= = 0
如果计数> 0
打破
结束
分子= (2 ^ 2 + jj ^ 2) * (2 ^ 2 + jj ^ 2);
如果临时工e15 > 2
临时工=新品(临时工);
分子=新品(2 ^ 2 + jj ^ 2) *新品(2 ^ 2 + jj ^ 2);
结束
分母=临时工* 4;
%如果肾小球囊性肾病(分子、分母)= = 1
数量=计数+ 1;
结果(计数:)=(分子、分母)
toc
打破
% %禁用结束
结束
结束
结束
结束
结束
结束
结束
结束
结束
结束
toc

约翰D 'Errico

你好陈——我很抱歉,但是我没有任何理由或需要甚至是业余时间在这一点上“测试”新品。我知道它的工作原理。说实话,这感觉就像某种作业问题,或者一个项目欧拉(像)的问题,在一些网站上找到。像这样的问题不是一个测试的软件,它们是考验你的分析能力来减少它更轻松地解决了在合理的时间。所以我不会为你解决它。我将给你一个提示。

考虑的模组完全平方数,国防部194年。注意,您可以计算,模量即使没有新品如果你小心相当大的数字。它告诉你如果两个这样的元素有相同的模量?它帮助你找到一个解决方案吗?还有一些搜索要求,但这可能会减少你的搜索的范围。

凯文

嗨,约翰

问题主要在于新品工具箱的计算能力的限制。

如。

当确定一个数量是一个平方数,我用“圆sqrt (m) = =√(m)”不适合大量m。

请试着找到一个有理数n受:
√√√n, n + 97年,n - 97都是有理数?我相信这将是一个很好的验证方法工具箱的计算能力。

米凯拉

哇……我设计浮点硬件,这只是我的心意。大感谢xxx !

特里斯坦

rad !工作的我需要的盒子,谢谢!

约翰D 'Errico

也许我们正在看这个错误的方式。

假设你的目标是生成随机数,没有替换的区间[0,2 ^ 200 - 1]。

是的,碰撞的几率是极小的,但关键是那么容易为数字在一个较小的区间。在这里我将用20“数字”的数字,每个数字在1024年基地。

n = 500000;
备件= 100;
B =地板(兰德(n +备件,20)* 1024);

消除任何冲突,虽然本质上不会有任何的数字大。独特类型的课程,所以我们现在提取数字我们最初想要的。

B =独特(B,“行”);
印第安纳州= randperm (n +备件);
B = B(印第安纳州(1:n):);

做完这些,你可以很容易地将其转换成新品数量如果你希望他们在一个大的十进制形式由于某种原因,或只是离开之后。或者,假设您想使用小数形式,[0,1 e1000-1]的界限。这里我们可以使用数字与100年基地1 e10位数。同样的方法适用。

生成一些备件非常便宜,所以没有真正的问题。

事实上,只要你能系数的上限(+ 1)小质数的列表,所有这些都小于2 ^ 53岁,人们总是可以用我上面描述的方案。唯一的问题是,如果你想产生样本,躺在一个区间:

(0,12323242124232456456345346)

当然,我选择仔细12323242124232456456345347这个数字,是一个大的质数。这就是为什么我randint代码是缓慢的,因为它允许任何一般的上限。(我当然可以加速,一些人认为,自从我选择了一个可能不是最优的算法速度。我需要离开,对于未来重写。)

迈克尔

对于这个实验,我明显的尖端闯入2 ^ 60规模更大的问题。理想情况下我的问题大小100 - 200,起床直到现在,似乎不太可能。它可能不是。我的问题不是在存储大整数(试着用uint64),但在操纵它们与现有的功能。这些数字的金宝app支持已被添加,但许多功能,如二进制、十进制转换,由2 ^ 53大小是有限的。这就是你的工具来完美——如果你记得你发现我试图用一些劣质软件二进制转换为十进制。

我知道很多人使用这个页面来抱怨你的软件不适合他们想要什么,我想表达我的感激之情和贡献可能对你有用的东西或人。我们不是所有让你,约翰。和平、爱和谢谢你的软件。

和平的,

迈克

约翰D 'Errico

虽然我很高兴看到一些觉得新品有用,没有强迫你使用一个工具,用来操作数据,甚至许多成千上万的小数位数。如果你的目标是没有什么比将融入一个64位整数,然后使用uint64为您操作。(只有64位非常小的新品设计问题处理)。新品显然不能参加与运算速度这些数字,因为这是苹果和橘子的问题。

有一天,我希望去重写新品,但即使这样我不会合理预计超过10:1的加速在任何我做了测试,甚至将迫使一些潜在的我妥协。

使用正确的工具,你的问题。在这种情况下,uint64似乎是一个更好的选择。

迈克尔

这里有一些数据在大数字。我想我会把我的代码不能重复,因为它不是有效的删除它们。排序需要一些时间,但我想我可以工作的秩序很好。所以现在我觉得我很好,只是觉得你会感兴趣的一些运行时,你告诉我如果什么东西看起来。

> > N =新品(uint64 (2 ^ 60))
> >抽搐,vsamples = randint (N,[1] 500000年);toc
运行时间是1138.346514秒。
> >抽搐,vsamplesU =独特(vsamples); toc
运行时间是1811.413225秒。
> >抽搐,vsamplesS = (vsamples); toc
运行时间是1833.296390秒。

迈克尔

我也看到,独特的()是导致了工具箱,所以只有~ 55碰撞每500000个样本,我可以很容易地删除重复使用独一无二的。我猜那将是更有效的比重采样的方法。

约翰D 'Errico

迈克尔,你在这里有大量的好处。我在网上看到你的问题,你在看很大的数字。假设我们选择样本500000数字设置1:2 ^ 50,但允许替换吗?碰撞的可能性是什么?这是一个大型的生日悖论问题。我们可以计算碰撞的概率在这种情况下:

> > 1 - 10 ^总和(log10 (1 - (1:500000) * 2 ^ -50))
ans =
0.00011102

所以冲突发生的概率是相当小的。

如果我们允许随机抽样与更换高达2 ^ 60,我记得这是你的问题的基础上,任何碰撞的概率就小很多。当然这是不可能的,但一个低概率的事件。你可以选择简单的完全忽略的可能性。如果你坚持一个完全零概率的碰撞,这也是可能的。重采样是最简单的。例如,假设我们选择样本的一组整数1:2 ^ 50 ?只要我们在2 ^ 53岁,我们可以用双打。因此

n = 500000;
m = 2 ^ 50;
一个=装天花板(兰德(1,n) *米);
一个=独特的(一个);
k = n -元素个数(一个);
而k > 0
= [A,装天花板(兰德(k) *米));
一个=独特的(一个);
k = n -元素个数(一个);
结束
一个= (randperm (n));

当然,当极限超过2 ^ 53-1,你可以做一个类似的重采样方案新品数量使用randint函数生成样本。独特的定义为新品。

迈克尔

我刚进入文档(谢谢你所有的,顺便说一下)。我看到我们可以生成随机数的向量替换,但这是可能的(或会困难)从人口不重复生成随机数?

迈克尔

哦我的上帝我爱你。

约翰D 'Errico

好吧,我不知道什么是l的价值,因为你不会说。然而,我试着l = 7。毫不奇怪,它工作得很好,给了这些结果:

4
16
256年
65536年
4294967296
18446744073709551616
340282366920938463463374607431768211456

我的猜测是,你又做了而不考虑你所做的。

看输出! ! ! ! ! ! !看到t的值被显示是一个双精度数,不是一个新品数量。所以不管你告诉我你做了什么,这个输出并非来自您发布的代码。

思考你在做什么之前,你问一个问题。请。我恳求你。

Nanthini

嗨,约翰,
我想调用一个函数递归. .在新品涉及数字…在执行这个函数代码后我有错误请暗示我一些主意解决这个问题....提前谢谢....

我的代码是
n =新品(' 59623408128589294906667477489466511394227058875719821124229053681229189216330915080633066080885115044018179752252075074762255857650359062592367314714255870395157878516147169752676083317321479715959914788386131373552660119411485042306204724685302709882300932537368996737625591854420932024858921774454130558350942691706925108621964426007163860852250193402906989838459886518533364378045747452657637521597746398695785988555098978535368265198866036728222641091714452140558062069296423468874123503682189797544270604765655771 ');
m =新品(2);
r =新品(1);
c(1) =国防部(电力(m, r), n);
t (1) = c (1);
i = 1: l
c (i + 1) =新品(c (i))。*新品(c (i));
如果lt (c (i + 1), n) = = 1
t (i + 1) =国防部(c (i + 1), n);
其他的
t (i + 1) = c (i + 1);
结束
disp (t (i + 1));
结束

输出和错误是:
2

4

16

256年

65536年

4.2950 e + 009

? ? ?错误使用= = >新品。新品在141
如果N是双重的,它不可能大于2 ^ 53 - 1

错误= = >新品。lt 46岁
INT1 =新品(INT1);

错误= = > mdxp 19岁
如果lt (c (i + 1), n) = = 1

Nanthini

谢谢约翰…丫你这里后我将通过帮助尽我所能……

约翰D 'Errico

叹息。我看到半睡半醒时,我回答说。

这将做正确的事情,但我是玩着不同的例子,和编辑我的反应,所以它显示了响应的错误导致。

> > 1 +订单(新品(123456))
ans =
6

当然,如果你真的提取数字,数字就会成功。

> >元素个数(数字(新品(123456)))
ans =
6

disp也行,但你要减去最初几个空格。总是有四个主要的空白。

> >元素个数(deblank (disp(新品(123456))))- 4
ans =
6

约翰D 'Errico

在新品扫描所有的功能。真的是没有那么多。阅读的帮助。您可能会发现这些工具要做到这一点,你甚至可能会发现其他工具,你永远不知道存在于那里。

最简单的是使用顺序函数,它返回10的力量与最高的数字。加1,会告诉你你想要的。

> > 1 +订单(新品(123456))
ans =
5

或者,因为disp实际上返回数量的数字作为一个字符串变量……

> >元素个数(disp(新品(123456)))
ans =
10

或者,你可以统计数字本身,提取到一个数值向量……

> >元素个数(数字(新品(123456)))
ans =
6

最后,您可以计算以10为底的对数,然后取上限,但由于log10返回一个浮点数,这实际上可能不准确,会有进一步的问题非容积数据。

Nanthini

嗨,约翰,
有没有可能找到的长度新品号? ? ?
例如n =新品(“59623408128589294906667477489466511394227058875719821124229053681229189216330915080633066080885115044018179752252075074762255857650359062592367314714255870395157878516147169752676083317321479715959914788386131373552660119411485042306204724685302709882300932537368996737625591854420932024858921774454130558350942691706925108621964426007163860852250193402906989838459886518533364378045747452657637521597746398695785988555098978535368265198866036728222641091714452140558062069296423468874123503682189797544270604765655771”)
如果想,我给长度(n),它显示了ans 1…请建议我一些想法……

约翰D 'Errico

powermod字符输入不工作,只在新品输入。只有新品函数本身能够将一个十进制数字的字符串转换成一个新品数量。如果你不能打扰将新品形式,它不会纠正你的错误,猜你预期的输入被视为一个数字。我不会/不写代码有先见之明,纠正了所有可能的错误。电脑做你告诉他们要做的事情。他们跟随你的指示准确,不知道你想做什么在你的脑海里,当你写下错误或含糊不清的指示。

Nanthini

我用powermod函数来获取结果,计算国防部(M ^ E, N) M E, N应该新品数量对吧? ? ?但对于M,我将字符转换为ASCII值例如‘海’是我输入后转换成ASCII也添加填充比特这样成为104097105000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
如果我通过这个号码到powermod函数N =新品(' 59623408128589294906667477489466511394227058875719821124229053681229189216330915080633066080885115044018179752252075074762255857650359062592367314714255870395157878516147169752676083317321479715959914788386131373552660119411485042306204724685302709882300932537368996737625591854420932024858921774454130558350942691706925108621964426007163860852250193402906989838459886518533364378045747452657637521597746398695785988555098978535368265198866036728222641091714452140558062069296423468874123503682189797544270604765655771 ');
E =新品(' 877598789786798798477798374982794987349 ');
我得到了跟踪误差
? ? ?错误使用= = > mtimes
内部矩阵维度必须一致。

错误= = >新品。powermod 56岁
a2 = mod (a *, n);

错误= = >加密13岁
c = powermod (m, e, n);

我希望这里的问题是我没有ASCII值转换成新品数量
如何解决这个错误暗示我一些想法。谢谢你约翰

艾哈迈德Karakucuk

这是真正伟大的。我非常感谢你的努力你放入这个伟大的“产品”。

约翰D 'Errico

你是重载的言论问太多的问题,其中大部分你没有真的想过,或者阅读相关的帮助。请停止。给我发电子邮件而不是当你有一个问题,或者仅仅是阅读的帮助。

无论如何,我不知道你问什么你可能做错了,因为它并完全按照它应该工作。

> > =新品(' 367366666786786668787987897979797879879 ');

> > nextprime (a)
ans =
367366666786786668787987897979797880011

Nanthini

谢谢约翰…如果我生成新品数量分配给某个变量如=新品(“367366666786786668787987897979797879879”)
如果想要使用这个数字作为输入等功能nextprime如果我将给变量a作为输入其对吧? ?如果我给它不工作? ?
给我你的建议这些问题
提前谢谢....

约翰D 'Errico

读取输入的帮助。

> >输入=输入(“请输入一个新品数量:”、“s”);
请输入一个新品号码:53634523453456456465766566879675668997876768797865767867567685453433233465463446
> >新品(输入)
ans =
53634523453456456465766566879675668997876768797865767867567685453433233465463446

或者,使用inputdlg从一个对话框获得输入。

Nanthini

你好约翰,如果有无论如何从用户交互输入新品
(即)输入(进入新品没有)如何分配给定的输入新品功能? ? ?
还有一个问题,如果我生成新品数量分配给某个变量如=新品(“367366666786786668787987897979797879879”)
如果想要使用这个数字作为输入等功能nextprime如果我将给变量a作为输入其对吧? ?如果我给它不工作? ?
给我你的建议这些问题
提前谢谢....

约翰D 'Errico

老实说,我从没想过min和max。是的,这将是容易写这些工具。事实上,我没有写一个最小/最大设施在高精度浮点工具我写。对我来说只是一个盲点。

jean - luc

嗨,约翰,

很好的包,谢谢!

一个小问题:是否有一个原因,新品不超载最小和最大?看起来简单,但这就是为什么我很惊讶他们失踪。

谢谢,

jean - luc

jean - luc

Nanthini

你好,我使用num2strexact函数通过你发送的链接,我无法编译它,因为它需要c / c++编译器. .我有dev-c + +编译器……在运行这个函数要求提到使用的编译器名称。我给了它作为dev-c + +编译器。但是它显示以下错误消息:
墨西哥人(“C: \ \ Nanthini \ MATLAB文件\ \用户num2strexact.c”)


选择一个编译器:

[0]没有

编译器:Dev-C c++ IDE
请选择从0 - 0
编译器:0

墨西哥人:没有编译器选择。没有采取行动。

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
警告:MATLAB C和Fortran API支持MATLAB已经改变了金宝app
变量有超过2 ^ 32-1元素。在不久的将来
你需要更新你的代码来使用新的
API。你可以找到更多的信息关于这个:
//www.tatmou.com/金宝appsupport/金宝搏官方网站solutions/en/data/1-5C27B9/?solution=1-5C27B9
建筑-largeArrayDims选项允许新的API。
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


MATLAB C: \ PROGRA ~ 1 \ \ R2010A \ BIN \墨西哥人。PL:错误:没有编译器选项文件能找到编译源代码。请运行“墨西哥人设置”来纠正。


好了,* *没工作…现在试着用mwSize定义……


墨西哥人(“-DDEFINEMWSIZE”、“C: \ \ Nanthini \ MATLAB文件\ \用户num2strexact.c”)
MATLAB C: \ PROGRA ~ 1 \ \ R2010A \ BIN \墨西哥人。PL:错误:没有编译器选项文件能找到编译源代码。请运行“墨西哥人设置”来纠正。

嗯…这并没有奏效。

墨西哥人命令失败。这可能是因为您已经运行
墨西哥人设置,选择非编译器,如Fortran。如果这
是这样,然后重新运行墨西哥人设置并选择一个C / c++编译器。

? ? ?错误使用= = > num2strexact享年155岁
无法编译num2strexact.c

= = >检查误差在5
d = num2strexact (v);

为什么我得到这个错误我必须做些什么来克服这个错误. .请给你的建议。
提前谢谢....

约翰D 'Errico

这一数字在matlab根本就算不上是真正的一个整数,所以转换成一个整数格式似乎有点过度。或者,也许你可以认为它是整数,很多都是无法区分彼此。计算精确的整数结果为整数,不能解决似乎是浪费时间。

> > p = 2.9600 e + 024;
> > eps (p)
ans =
536870912

大致可以认为这是最小的数的大小,可以添加到p和从之外,得到不同的结果。或认为它是p的粒度,在确定有多少污水或不确定性的价值。每股收益(p)大于1时,那么你就无法有效地解决p为整数。因此

> > eps (2 ^ 53 - 1)
ans =
1

> > eps (2 ^ 53)
ans =
2

至于有多少位用于p, log2告诉我们,我们需要超过80位的精确定义p为整数。

> > log2 (p)
ans =
81.292

但在MATLAB使用内部IEEE双精度数字格式,有52位致力于尾数,符号位,在指数,有效11位,适合64位总数。

如果你坚持将这个数字转换为新品,您可以使用函数num2strexact,还发现在文件交换。

//www.tatmou.com/matlabcentral/fileexchange/22239-num2strexact-exact-version-of-num2str

一旦p可作为一个字符串,修剪提供任何超出了小数点,然后新品可以理解为一个整数。

Nanthini

2960000000000000100663296,你能告诉我占据上述数量的比特数…
提前谢谢…

约翰D 'Errico

对于任何在双精度数大于2 ^ 53 - 1,你不能直接将它转换成一个新品数量,因为你没有提供所有的整数位数的号码。你有双精度数p是一个浮点数。事实上,实际数字存储在MATLAB当你指定e p = 2.9600 + 024是2960000000000000100663296。(我的计算使用另一个工具。)这是因为MATLAB商店只使用有限数量的二进制位数量。这个数字并不存储为十进制整数你认为它是。出于这个原因,我从什么阻止你创建一个新品数量当数量超过2 ^ 53 - 1。

> > 2 ^ 53 - 1
ans =
9.0072 e + 15

这是一个简单的方法来测试,p当你进入它在matlab并不表示为一个整数:

> > p = 2.9600 e + 024;
> > p = = (p + 1)
ans =
1

你也可以测试平等。但请注意,测试实际上是一个模糊的一个。

> > isequal (2960000000000000100663296, p)
ans =
1

> > isequal (2960000000000000100034423, p)
ans =
1

> > isequal (2960000000000000000000002, p)
ans =
1

> > isequal (2959999999999999999999375, p)
ans =
1

看到,当你加1 p,数量没有改变!事实上,我可能会改变了很多,仍然不改变它到MATLAB知道。这不是一个错误在MATLAB很多初学者认为,但是当你使用双精度的事实。也是我写了新品的原因之一,因为大量的精度在matlab在双精度是有限的。

为了创建相应的新品数量,你需要提供所有的数字号码。这就是为什么我让你提供新品的字符串输入一个整数,所以您可以创建数字大于2 ^ 53-1。

> > p =新品(' 296000000000000000000000 ');
> >肾小球囊性肾病(67页)
ans =
1

然而,现在试着加1测试真正的新品数量。

> > p =新品(“296000000000000000000000”)
p =
296000000000000000000000

> > p + 1
ans =
296000000000000000000001

> > p = = (p + 1)
ans =
0

当然,这所有的算法应该一样,因为新品处理细节。

Nanthini

我试图找到肾小球囊性肾病后两个数字但我得到以下错误,请解释为什么我得到了这个错误
e = 67
p = 2.9600 e + 024

? ? ?错误使用= = >新品。新品在141
如果N是双重的,它不可能大于2 ^ 53 - 1

在23岁的时候错误= = >测试
z =肾小球囊性肾病(e,新品(p));

提前谢谢. .

Nanthini

非常感谢....我得到了输出:…)

Nanthini

抱歉我用MATLAB R2011a误
我输入R2021a…

约翰D 'Errico

我试着您的测试用例。

> > int1 =新品(' 4536788992900999999999999999999999999423456789072434546775885959 ');

> > int2 =新品(' 2345678998765432112345678987654323456789755654433245567787889899 ');

> > t =肾小球囊性肾病(int2 int1)
t =
1

如我所料,效果非常好。现在,无可否认,我没有R2021a版本,因为这是只有2011,版本将不会发布另一个10年左右。我有释放R2011b。:)

我的猜测是,你做了不合适的东西当你下载的文件。最有可能的是,你的部分或全部的m-files @vpi目录。我在一个完整的随机猜测,基于类的错误消息,这可能不会发生,除非你周围的一些文件。也许你把@vpi目录搜索路径,另一个禁忌,readme文件明确说不做。如果我可能重复文件ReadAboutVPI.rtf所说:

“不要把@vpi目录搜索路径! ! !不采取任何目录的功能,因为这将打破新品的操作代码! ! !”

最好似乎完全删除新品的文件下载,并重新安装,这次提供的指令。

Nanthini

你好我希望找到肾小球囊性肾病的两个大的数字,我用新品但是我有一些错误…请解释为什么我有这种错误吗
我的输入
int1 =新品(' 4536788992900999999999999999999999999423456789072434546775885959 ');
int2 =新品(' 2345678998765432112345678987654323456789755654433245567787889899 ');
t =肾小球囊性肾病(int2 int1);
disp (t);

但是我有这样的错误
? ? ?错误使用= = >类
必须从一个类的构造函数调用类函数。
95年= = >新品在错误
INT =类(INT,“新品”);
误差在1 = = >检查
int1 =新品(' 4536788992900999999999999999999999999423456789072434546775885959 ');

我的MATLAB版本是R2021a ....

约翰D 'Errico

M =新品(2)^ 100;
M =
1267650600228229401496703205376

模块化操作工作如你所愿。

国防部((M + 1) ^ 263 - 1米)
ans =
0

模块化的乘法逆工作,只要逆存在,minv应该计算成反比。

P = minv(3米)
P =
845100400152152934331135470251

国防部(3 * P M)
ans =
1

Lea玉

你好,我是新matlab和到目前为止,我有一个惊人的时间使用这个工具箱,现在我想使用它来执行算术伽罗瓦域内。最大功率MATLAB支持2 ^ 16,我如何使用新金宝app品为了值2 ^ 100和仍然能够执行算术和GF字段。谢谢

Sarla

:),disp稍后添加,因为我试图强行东西很多新品变量。我认为这个错误是在变量。我仍然运行一些测试。

其实我很像randint函数。它让我的生活有点简单。

谢谢你! !

约翰D 'Errico

不。你不需要将现有的新品数量转化为使用disp新品形式。

如果k和PointOrder已经新品数量,那么没有必要使用disp。然而,从新品返回的错误消息在你最初的问题表明,刺激(或其中一个参数在这行代码)不是一个新品数量。

当添加了两个数字(一个是新品数量)是这样的:

我尝试将这两个数字转化为新品形式,然后我添加。一个例子。

> > =新品(123456);
> > + 12
ans =
123468年

新品看着这个和意识到已经是新品数量,但这12不是。所以它在内部转换12到新品的形式,然后添加数字,做任何必要的。所有这一切很好地工作,完全透明。但当我们试试这个真的大量添加到吗?

> >一个+ 1 e37
? ? ?错误使用= = >新品。新品在160
如果N是双重的,它不可能大于2 ^ 53 - 1

错误= = >新品。+ 61
INT2 =新品(INT2);

看到,当新品试图1 e37转换成一个新品,它失败了。这是因为1 e37太大在MATLAB作为精确浮点表示整数,弗林特。我(不)不知道的所有数字1 e37,因为只有大约16人。的限制实际上是2 ^ 53-1双。

> > 2 ^ 53-1
ans =
9.0072 e + 15

任何大于,新品就头痛,因为MATLAB不存储足够的信息恢复所有的小数点左边的数字。

你显示的错误消息说,其中一个参数加确实不是一个新品数量,而且它太大,完全转换为一个新品数量。当这种情况发生时,新品必须返回一个错误。它还能做什么?

就randint而言,应该合理有效的就这些事情,但是我必须非常谨慎积极,数字真的是均匀分布的。我会看一遍,看看是否可以提高一点速度。如果我着急加速,我可能最终损害pseudo-randomness的结果。例如,假设我想生成一个均匀分布随机整数1与e100作为新品一样大?

我不能简单地使用兰德生成一个随机数,然后规模高达1。数字不会均匀分布。所有数字的范围不可能和等可能。实际上新品/ randint独立生成这些数字,在某种程度上,将导致一个均匀分布的数字,而这些数字都是等可能的理论。但如果你想要一个数字与100年随机数字,新品必须创造大约100个随机数。这使它比你慢,但它所需的属性。

Sarla

我应该清楚。我的错误。invk和刺激(我会改变名称)是新品变量。这些值后抵达一些计算(我从命令终端复制这些值)。所以我没有选择为新品作为字符串提供这些值。
我实际的代码是这样的:
invk = minv (k, PointOrder) % k和PointOrder是用户定义的新品变量

prod1 =新品(da * r) % da和r是用户定义的新品变量

s =新品(mod(新品(disp (invk)) *新品((disp(出)+ disp (prod1))),新品(PointOrder)))

在上述情况我能做什么?

也对于randint功能我用它来生成私钥在处理新品变量!但是我的缓慢处理器需要太长的时间来执行特定的计算。现在我在我的程序使用randint和randomnum取决于我所需要的精度。

约翰D 'Errico

回答这个问题对其他随机数生成器,randint生成均匀分布随机新品整数。因此我发现它保理和素性测试的特定值。这实际上是我为什么randint写道。

生成数字与其他分布,需要指定一个分布本身。如果你是工作在新品形式、数量必须是整数。因为没有太多的常用的概率分布变量是整数(泊松是一个)我不知道我可以提供足够多的人会使用。

约翰D 'Errico

当你写这样的事情:

invk = 5431182971659226082032497739807769284499946472968309173822

刺激=
66634193303502359521887744541301070677802959088568215854843250

Matlab创建称为刺激和invk双精度数字。(顺便说一句,这个名字刺激是一个好的选择,因为它过载刺激功能,防止以后使用刺激功能。)接下来,你要做的计算:

s =新品(mod(新品(invk) *新品())+刺激)),新品(PointOrder)))

在matlab试图添加促使新品数量,从invk转换。为了做到这一点,它必须invk和刺激转换成新品形式。但这些数字太大,完全转换成一个新品的数字。哦。这是你的错误。看到,

invk =
5.4312 e + 57

log2 (invk)
ans =
191.79

所以invk是一个双精度数,与太多的位数来表示一个整数标准matlab。Matlab的限制一个浮点数的整数(有时称为FLINT)是2 ^ 53-1。但新品可以处理的数字,如果你叫通过正确。

您可以定义它们作为新品数量直接调用新品字符串的位数。

invk =新品(“5431182971659226082032497739807769284499946472968309173822”)

刺激=新品('
66634193303502359521887744541301070677802959088568215854843250 ')

通过提供新品的数字字符串,它可以直接转化为新品形式不损失精度。

Sarla


我有一个问题与对新品进行某些计算数字。
我有一个新品变量
invk = 5431182971659226082032497739807769284499946472968309173822

我有另一个变量
刺激=
66634193303502359521887744541301070677802959088568215854843250

现在我有这个表达式
s =新品(mod(新品(invk) *新品())
+刺激),新品(PointOrder)))

现在程序没问题,直到prod.的价值,但涉及到完全停止的时候。
我得到一个错误的形式:
? ? ?错误使用= = >新品。新品在141
如果N是双重的,它不可能大于2 ^ 53 - 1

错误= = >新品。加上在51
INT1 =新品(INT1);

错误= = > dsaforlargenumbers享年98岁
s =新品(mod(新品(invk) *新品((+刺激))、PointOrder))

你能帮我吗?

Sarla

是的你是对的。我没有真正探索isprime新品。

有没有randint以外的函数来生成伪随机数新品吗?

约翰D 'Errico

你可以数一数数量来确定首要的因素。这将是有效的,如果是质数,因为几乎isprime因素做的第一件事情就是打个电话。然而,当它不是质数因子将需要更长的时间,因为分解数量相对比较耗时。

最后,如果你希望做的就是isprime打电话来确定原始的号码。

约翰D 'Errico

加布里埃尔-指数powermod可能相当大,新品数量本身。例如……

抽搐,powermod(新品(“124142565235674676762435233523”),新品(“1234562425532452245524323146735634323443256767474343446454564657645466435556453557454646578567453543658567536457567346878067852”),新品(' 137457798574858 ')),toc

ans =
101407725757733

当然,由于powermod新品的主力在很多的工具,如isprime modroot和因素,它需要有效。

盖伯瑞尔

@Sarla

使用isprime(新品(p)) ?
它可能比保理。数是质数时返回1。

Sarla

:)所以即使最愚蠢的问题有其用途!
我意识到我可以用因素新品测试是否一个数是否为素数。是这样的:

fac =因素(新品(p));
如果长度(fac) = = 1
真话= 1;
其他的
真话= 0;
结束
即如果长度1是质数!这样我真的没有打扰素性测试!

盖伯瑞尔

盖伯瑞尔

_ -

教训……谢谢=)
powermod指数是否有限制?

约翰D 'Errico

加布里埃尔。是的,你可以使用代码编写。但你也可能不高兴这样做。我将指出已经存在有powermod工具新品! ! ! ! !你比较如何?

我救了你写的代码,称之为powermod2,然后在一个简单的比较。

> >抽搐,R =国防部(新品(2)^ 12345、新品(9937)),toc
R =
8315年
运行时间是0.457709秒。

> >抽搐,R = powermod(新品(2),12345年,新品(9937)),toc
R =
8315年
运行时间是0.024054秒。

> >抽搐,R = powermod2(新品(2),12345年,新品(9937)),toc
R =
7516年
运行时间是0.068513秒。

看到我自己的powermod代码产生正确的,相同的结果。

你的代码是慢。和答案是错误的。看看一个代码的存在是为了解决你的问题总是一个好主意。测试你的代码正确性总是同样重要。

盖伯瑞尔

谢谢你这个伟大的计划。我绝对不是一个专业的程序员但我写了一个小函数,因为我需要类似powermod从Matlab符号工具箱。我可能犯了错误,但它似乎快很多使用这个计算模的权力。
函数的结果= powermod (x、电力、模量)
intermediateResult = x;
标志= 1;
因为我= 1:32
intermediateResult =国防部(intermediateResult ^ 2,模量);
如果(bitget(我),)
如果(国旗)
moduloResult = intermediateResult;
国旗= 0;
其他的
moduloResult = moduloResult * intermediateResult;
结束
结束
结束
结果=国防部(moduloResult,模量);
结束

约翰D 'Errico

你让我想,我应该包括一个num2str函数正是出于这个目的,用户将更明显。

Sarla

:),完美的工作。对不起。应该在这一点之前发布了一个愚蠢的问题。谢谢你!

约翰D 'Errico

Sarla——你错了,没有转换。试试这个:

> > N =新品(12)^ 37
N =
8505622499821102144576131684114829934592

> > nchar = disp (N)
nchar =
8505622499821102144576131684114829934592

> >谁nchar
类属性名称大小字节
nchar 1 x44 88字符

看到disp的转换,如果你提供一个输出参数,它给你什么你想要的。

Sarla


我其实是想显示一个新品的价值我matlab gui的文本框。但是我不能这样做。我认为从新品没有转换回字符串。所以我得到一个错误消息。有什么方法可以解决呢?

约翰D 'Errico

找到一个很大数量的因素,在这种情况下,有超过600个小数位数,可以是极其困难的。如果这些问题很容易,那么现代的加密方法中使用的计划将是容易破碎。

保理方案在新品/因素是能够处理数量与许多数字,但也有限制,我没有编码的最好的方法,但是只有一个相当不错的。(它仍然是比这更好的方法在MATLAB提供的默认的因素。有一天,我希望能提供一些更好的方法作为替代。)如果返回一个非常大的因素,那么你总是可以测试是否真正使用isprime ',或者因素简单地放弃了。例如,

F =因素(新品(2)^ 113 - 11)
F =
3 7 7 101 699440541326170624170606362123

isprime (F)
ans =
1 1 1 1 1

贾基尔

我想因式分解非常大
例子:
一个=新品(2);
b = ^ 2067;
c =鲨鱼;
如何sactorize吗?
当我因式分解因子函数然后matlab显示只有那些因素是小于2 ^ 32;
重新获得勇气值作为一个因素?
这个问题是什么?
以及如何处理它吗?

贾基尔

非常不错的工作
感谢。

Sarla

好吧。谢谢你无论如何!

约翰D 'Errico

嗯。我没有实现正(或者,换句话说,nan)新品。例如,似乎没有理由定义一个inf,作为新品数量基本上没有动态范围的限制。我看看,诚然我偶尔想到这些扩展会是适当的。

Sarla


我似乎是一个新品变量分配正面临一个问题。

我有一个变量声明为新品,另一个条件,如果这个变量是否等于正然后返回某个值。
问题是当我试着写点东西的形式
如果P = =正无穷
我得到一个错误的形式

错误使用= = >新品。新品在139
N必须有限

错误= = >新品。情商在44岁
INT2 =新品(INT2);

任何建议如何能让我实现这个愿望吗?
注:正是必不可少的程序。

Sarla

这个提交是美妙的工作和巨大的数字,和挣扎了几天之后实现加密算法和挫败在每一点上,最后我偶然发现了这个。谢谢你!祝福你!

Evgeny公关

约翰D 'Errico

当你下载这个工具箱,或任何工具箱创建一个新的类,从未移动包含文件。不要把@vpi目录在你的搜索路径。没有地方下载的目录提供的Mathworks工具箱的层次结构。使用一些其他目录提供存储所有下载文件。

所有你应该做的是解压缩下载的zip文件,然后将VariablePrecisionIntegers目录在你的搜索路径。

这个文件会帮我解决很多问题如果我能让它工作。无论我做什么,我一直得到这个错误信息:

? ? ?错误使用= = >类
必须从一个类的构造函数调用类函数。

181年= = >新品在错误
INT =类(INT,“新品”);

我做错了什么。我测试了复制粘贴一些自己的例子,我得到这个消息。我做错了什么?我需要有更多的文件比新品。m在同一个目录的文件我处理吗?

/古斯塔夫林德伯格

约瑟夫·柯克

这很有可能是最好的提交我下载的文件交换。伟大的工作约翰!

哈里特了

罗伯•坎贝尔

约翰D 'Errico

谢谢你伊恩。我发送一个更新修复legendresymbol bug。约翰

伊恩

伟大的工作!

我得到了这个作为参考和指导我尝试编写自己的二次筛。

我注意到一个问题legendresymbol。我认为你有‘iseven检查向后下p = = 2。

例如:legendresymbol (87463 2) = 0。我希望' 1 '。

谢谢你如此伟大的工具箱。

内森·格列柯

Guillaume

只是一个小的词说我真的很喜欢这个包,非常方便!

然而,一个错误的文档说randint生成1到N,这是错误的。它生成数字0到N。

此外,我希望快速功能类似于biterr(告诉2整数)的比特误码率。此刻,我和一些笔和vpi2bin计算函数,但它是相当缓慢的。

谢谢贺南洪这项工作!

约翰D 'Errico

我从不超载是结肠癌的一件事。我一度认为做这样的,但从逻辑上讲,没有必要这样做。考虑……

假设参数结肠小数吗?在这种情况下,您可以简单地使用双正常将数字转换为整数,然后用冒号。即便如此,别指望一个循环

因为我= 1:2 ^ 53
的东西
结束

在matlab很快终止。

第二种情况是,如果数据是真实的新品数量,这样一个很好的理由。例如,在情况下,你的姿势,这个循环不会终止宇宙经历热死之前,甚至在世界上最快的超级计算机,即使在一个云的1000世界上最快的超级计算机。你必须欣赏2 ^ 1024是一个数超过300 0。

log10(新品(2)^ 1024)
ans =
308.25

事实上,新品(2)^ 1024略超过vpi2english的能力!

vpi2english(新品(2)^ 1000)
ans =
十novemnonagintillion,七百一十五octononagintillion八十六septennonagintillion七十一sexnonagintillion八百六十二quinnonagintillion六百七十三quattuornonagintillion二百零九trenonagintillion四百八十四duononagintillion二百五十unnonagintillion四百九十nonagintillion六百novemoctogintillion十八octooctogintillion,一百零五septoctogintillion六百一十四sexoctogintillion四十八quinoctogintillion,一百一十七quattuoroctogintillion五treoctogintillion五十,三百三十六duooctogintillion七十四unoctogintillion四百三十七octogintillion五百零三novemseptuagintillion八百八十三octoseptuagintillion七百零三septenseptuagintillion五百一十sexseptuagintillion五百一十一quinseptuagintillion,…

这样持续一段时间。这是一个大数目。它比基本粒子的数量在整个宇宙中,许多数量级。

假设我们有一点点简单。如何

因为我=新品(2)^ 1023:新品(2)^ 1024
的东西
结束

在理论上,这个循环会在一半的时间内终止你的循环。那又怎样?它仍然会拿一个无限的时间。

考虑一个更简单的问题,至少在理论。

i = 1:新品(1 e21)
的东西
结束

这个数字只有21个0。即使在超级计算机的能力1计算机的性能,这将需要一些天的CPU时间执行。在你的笔记本电脑,期望它需要多年的时间。

好吧,也许是太多。这个简单的循环呢?

N =新品(10)^ 21;
我= N (N + 100)
的东西
结束

虽然我可能会考虑让你做这个,没有什么阻止你做一样简单。

N =新品(10)^ 21;
j = 0:100
我= N + j;
的东西
结束

最后一个案子是唯一一个我已经表明,有可能在一个正常的计算机在有限的时间内,它是非常可能已经如我。

所以这就是为什么我从不提供了工具去做你想要的。从来没有任何理由。

问候,
约翰

嗨,乔恩,

我是新使用你的新品工具箱,它引起了我的注意。做测试,我意识到使用新品类型以“为”的形式I = 1:新品(2)^ 1024、结果发送我消息:“未定义的函数或方法“结肠”类型的输入参数“新品”。。

我的问题是,当前版本的新品工具箱不处理这个任务?或有另一种方法来解决这个问题吗?

提前谢谢你的关注。

约翰D 'Errico

很抱歉。只有binomfactors代码使用集运商,只有binomfactors nchoosek调用。我从未测试,因为集运商是在我的搜索路径。

无论如何,将更有效使用调用独特,然后accumarray无论如何,因为没有宽容是就业。

我提交了一个新版本。它将在周一早上。

德里克。奥康纳

约翰,

demo_vpi。我需要你集运商功能:

//www.tatmou.com/matlabcentral/fileexchange/8354-consolidator

伟大的计划。

德里克。奥康纳

哈立德·哈米德

更多的乐趣与vpi2english如果使用,例如,

说话(vpi2english(新品(2 ^ 52)))

函数“说”是summission文件ID: # 4769名为“说话”。

也有一些“说”提交。

哈立德·哈米德

另一个好的理由使用更高的preciesion:著名的减去取消错误

> > x = 77617, y = 33096; z = 33375 * y ^ 6 + 100 * x ^ 2 * (11 * x ^ 2 * y ^ 2 y y ^ ^ 6 - 121 * 4 - 2) + 550 * y ^ 8

z = -1.5112 e + 023

> > x =符号(77617);y =符号(33096);z = 33375 * y ^ 6 + 100 * x ^ 2 * (11 * x ^ 2 * y ^ 2 y y ^ ^ 6 - 121 * 4 - 2) + 550 * y ^ 8

z = -200

> > x = vpa (77617), y = vpa (33096); z = 100 * x ^ 2 * (11 * x ^ 2 * y ^ 2 y y ^ ^ 6 - 121 * 4 - 2) + 33375 * y ^ 6 + 550 * y ^ 8

z = -200.0

> > x =新品(77617),y =新品(33096);z = 33375 * y ^ 6 + 100 * x ^ 2 * (11 * x ^ 2 * y ^ 2 y y ^ ^ 6 - 121 * 4 - 2) + 550 * y ^ 8

z = -200

新品一样精确的符号和vpa,大约四倍信谊和比vpa快8倍

约翰D 'Errico

嗨,格温多林,

我今天要提交一个新版本。最简单的事是保存文件以一种兼容老版本,回到version 7。

约翰

格温多林费舍尔

嗨,约翰,
我喜欢你的提交,它即使在R14 puposes没问题。使用例程,你的旧因素作为新的因素命令使用垫文件(_primeslist_),旧的matlab版本可以不读。是否可以提供一个兼容的垫为MATLAB R14文件吗?

谢谢

约翰D 'Errico

本——我已经提交一个更新,现在处理+和*的病理情况。

约翰D 'Errico

约翰,我想所表现出的问题是你的路。你使用的是旧版本的MATLAB ?也许释放11 ?如果是这样,我将不会感到惊讶看到一个问题。我不会期待新品在旧版本上运行,并且我没有测试。

如果你真的有一个最近的版本,然后通过邮件请与我联系,我将有助于解决这个问题。

约翰•爱德华兹

嗨,约翰,

我是一个初学者,Matlab。然而,你的创作引起了我的注意,我下载了包。我用非常简单的例子但MATLAB一直返回相同的错误:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
=新品(17)^ 17
? ? ?lseif ~ ischar (N) & &
|
失踪的变量或函数。

语法错误= = > C: \ MATLABR11 \工具箱\ VariablePrecisionIntegers \ @vpi \ vpi.m
在51行= = > elseif ~ ischar (N) & & ~ isnumeric (N)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -

我不知道如何解决这个错误。什么好主意吗?

谢谢

约翰•爱德华兹

本Petschel

约翰,你已经做了一个伟大的数学社区服务(特别是理论家和Project Euler爱好者!)

新品/添加携带操作可以提高病理情况下的性能,如1 +新品(repmat (' 9 ', 1,1 e6))通过改变一个for循环的while循环。

Neha P

亲爱的Errico,

工具箱创建以存储大整数数字已经对我们的项目非常有帮助。目前我们遇到一个问题来存储大浮动的数字。
我想请求你给我任何有关上述问题的信息。

Lissa

约翰D 'Errico

我只是上传一个新的版本,在vpi2english修复bug。

博安德烈亚斯

博安德烈亚斯

伟大的提交,但似乎有一个错误的vpi2english数字从1到99:

> > vpi2english(新品(' 1 '))
? ? ?指数超过矩阵维度。

错误= = >新品。vpi2base在114
B (i) = base2dec (fliplr (cdigits(印第安纳州)),10);

错误= = >新品。vpi2english在53
base1000 = vpi2base (N, 1000);

约翰D 'Errico

对不起。我将修正演示。

詹坎

非常酷,
但是我认为有毛病的第129行演示:
> > iseven (2 ^ 127)
它不应该只是一个双,但太大是一个新品……
它给了一个错误在r2009a。

也许你的意思iseven(新品(2)^ 127)…
Giampy

约翰D 'Errico

我做了一个更仔细的调查问题。我实际上可以使用整数内部存储的格式吗?

事实证明,我不能这样做,至少不是没有严重损害这个工具箱的功能。首先,问题是,我可以使用INT8存储吗?答案是否定的。法案是否检查工作时,他显然没有做用一双新品数之间。新品使用一个很好的技巧把一双新品数量。它使用conv,获得大量增加它的乘法速度。由于乘法对于这些工具是必要的,失去conv会很坏的表现。

可悲的是,conv不支持int8输入。金宝app更糟糕的是,int8会导致一个戏剧性的限制大小的新品可以处理的数字。试试这个简单的测试:

9 N = [9];
conv (N, N)
ans =
81 162 81

所以我来存储数字99新品数量使用int8存储机制,然后我不能实际使用conv乘以99 * 99,即使int8支持作为输入conv。conv结果将溢出int8存储。金宝app

这表明另一种。也许我可以使用单一的内部存储的数字。事实上,这提供了一些小的收获。使用单一的内存需求的新品数量削减一半。更好的是,在我的测试中单一操作整数实际上是为双打比他们快一点。

一会儿,我想我至少可以使用单一。问题是,它也会导致一个问题。这将限制新品数量最多的大约100000位。再一次,问题是数字溢出在使用conv乘法。数字大似乎很大,我还是喜欢基本上没有限制数量的数字。

另一个选择是使用一个更小的形式存储,然后从int8双打,然后自动转换(内部)所有操作。我可以这样做,但似乎有风险,可能导致错误。

所以现在,我不得不坚持内部存储。

约翰D 'Errico

谢谢你比尔。我会解决的例子,考虑改变内部存储格式的问题。这是我以前认为。我最初的原因使他们所有的内部双打的最大速度。我想减少事件的数量,我需要int和double之间的强制类型转换。

比尔McKeeman

我印象深刻的范围和演示这个工具箱。非常好的工作。我有几个傻瓜置评。
最后一个例子在新品。米似乎失去了文本。
我建议是这样的例子,如果剪切和粘贴命令行,运行。我用我的世界时区外汇进入回应批评和对结果感到高兴。
我尝试更换
INT.digits =双(fliplr (N)) -48;

INT.digits = int8 (fliplr (N)) -int8 (“0”);
包似乎仍然运行,需要8 x新品数量更少的存储。

德里克。奥康纳

亲爱的阿兰,

谢谢你的回复和正确答案的意思(x) = 4.661273948537807 e - 005,(或
总和(x) = 7680 * 4.661273948537807 e - 005 = 0.3579858392477036(16位))
数据的均值是哪一个https://hpcrd.lbl.gov/SCG/ocean/NRS/etaana.dat

我打算要求之和(x)并不意味着(x)因为这个和(x)中讨论
本文通过云他和克里斯•H.Q.叮“使用精确的算法
为了提高并行应用程序中的数值再现性和稳定性”,
《超级计算机,18日,卷3号,2001年3月。

http://crd.lbl.gov/云和/论文/ HPA_JSC.pdf

在接下来的7680年etaana d.p.f.p.数字。dat存储在ssh.mat

他们给的总和(ssh) = 0.35798583924770355224609375(26位)。

我也认为你应该发布代码和如何条件的总和(x)
可以计算。我见过许多人惊讶
简单的求和可以给非常糟糕的结果。

Matlab给出总和(ssh) = 3.441476821899414 e + 001,相对误差
9.513444009773050 e + 001,将近2数量级的错误的。

使用1-norm我的条件数总和(ssh)
k_1 = n * sumexact (abs (ssh)) / abs (sumexact (ssh)) ~ 10 ^ 21。

如果我使用Matlab总和(ssh)我得到k_1 ~ 10 ^ 16,
这是不正确的,但仍然会发出警告:
这个问题很坏脾气的。

这是我的Matlab实现d牧师的方法,
使正确的结果,圆形的16位数:

= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
函数snew =底壳(xorig);

%利用道格拉斯·m .牧师的论文推荐。
% D.M.牧师:“浮点算法的属性:
%的数值稳定和精确的成本计算”,
%数学系,
%加州大学伯克利分校,美国CA (1992)。

%这个函数复杂度O (n log n),因为排序。
%,这是我们付出的代价得到正确的总和。

2006年3月%德里克·奥康纳写的。

% - - - - - -在减少xorig abs (x)

[absx吸收]=排序(abs (xorig),“下降”);
x = xorig(吸收);% | x1 | x2 > = | | > =…> = | xn |

% - - - - - - - - -求和- - - - - - - - - -补偿
销售= x (1);
c = 0;
k = 2:长度(x)
y = x (k) + c;
snew = + y出售;
u = snew -销售;
c = y - u;
销售= snew;
结束;
油底壳结束% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

这是结果使用牧师的方法:

> >油底壳(ssh)
ans =
3.579858392477036 e - 001

这里是结果利用残余的Intlab 5.5将30-digit精度:

> > p = 30;显示器(SumRump (ssh, p), p)
长ans =
3.579858392477035522460937500000 * 10 ^ -0001

看来,这至少需要26位海面高度问题
精度获得确切的金额。

Intlab在这里:http://www.ti3.tu-harburg.de/rump/intlab/

问候,

德里克。奥康纳

阿兰Barraud

新品是一个非常好的工具箱,非常感谢。
我应该添加评论,阿德里克Coonor问题。我发现4.661273948537807 e - 005的意思是“etaana”中的数据没有任何在Matlab工具箱使用浮动poitn计算。我用几年前我写了一个函数,计算完整精确的任何条件数(1.5 e17)在一个非常简单和有效的方法。

MATLABician

亲爱的凯文,

你不明白这个函数的效用”?首先,这个提交不是一个函数,这是一个工具箱。我建议你读约翰的回复瞥见它的效用,但之前我建议,如他所想的那样,你学习一些数学。可能会帮助你理解这个工具箱的工具,他的其他提交MIN2, MAX2,其效用,也理解不了,和许多其他的提交的之前,你去评论他们的效用。在那之后,我建议你浏览代码。我相信你可以学习一个或两个关于MATLAB的事情。

Omid

PS。像往常一样,伟大的约翰提交。谢谢你分享这个社区。

肯尼斯·伊顿

奥兰多·罗德里格斯

什么一个了不起的工具!谢谢你约翰!

德里克。奥康纳

亲爱的凯文,

请计算以下组的平均7680浮点数到3“重大”数字。

https://hpcrd.lbl.gov/SCG/ocean/NRS/etaana.dat

请把你的结果,告诉我们你是如何做到的。

你的真诚,

德里克。奥康纳

约翰D 'Errico

亲爱的凯文,

(叹气)。仅仅因为你个人不需要超过3位数的计算并不意味着没有人会有这样的需要。和没有理由垃圾的另一个有用的工作只是因为自己的的观点是如此的专业。

这个工具箱没有一个特定的目的。作为一个工具箱,它不应该如此专业,其他人不能使用它的目的。几十个工具箱的作为一个作者多年来,我一直惊讶于别人如何使用我提供的实用程序,以各种方式。但如果你需要一个理由,我将提供一些这样的原因。

当然最广为人知的原因与大整数的公钥加密。这里必须找到一个大素数(有很多数字),与他们一起工作。

http://en.wikipedia.org/wiki/RSA

在另一端加密的任务是打破这样的代码。这里需要工具因素大整数。虽然具体的工具我只提供给整数的因素是能够保理与任何规律性与几十位整数,它远比在MATLAB提供的工具非常有限。我也开始在其他分解工具,有可能解决较大的分解问题。诚然,最好的这样的工具将使用多个cpu在这样一个任务,分地工作。但是,这是很容易做的大整数分解的。读到二次筛分解的方法。

http://en.wikipedia.org/wiki/Quadratic_sieve

这些都是非常有用的方法,可以成功地将大量。再一次,他们需要使用多个cpu的能力,在并行工作,但这是现在变得相当可行的。事实上,我甚至写一个简单的二次筛工作分解代码,虽然远低于标准我穿上自己的发布工作。

这个工具箱不是(还)能够处理速度的必要因素与数百位数字。但它可以作为一个有用的实验算法的发展在这一领域,作为一种简单的,廉价的学习方法等技术工作。

有需要打破的代码?也许第二次世界大战持续了一段时间有那些数学家与阿兰·图灵没有完成他们的工作。阅读代码和密码。

http://www.codesandciphers.org.uk/

美国国家安全局许多数学家的工作就是这样的一个地方。

http://www.nsa.gov/CAREERS/

如果这组工具存在毫无理由除了素性测试和保理,我建议它有一些优点。但是里面有我提供的其他工具,可能提供价值。金宝搏官方网站解线性丢番图方程组常常要求在新闻组,所以我添加了一个简单的工具。是我将改善与未来版本的(时间)。同时我开始在佩尔方程解决工作。这些工具感兴趣的理论家,他们或许是无聊的。他们都倾向于利用连分式近似数字,近似分数,近似根,等。数论本身就是一个话题,在全球范围内提供职业数学家。

http://en.wikipedia.org/wiki/Number_theory

数论,也许是最漂亮的数学分支之一。它提供了一个为学生对数学感兴趣,容易与美丽问题制定相应的解决方案。金宝搏官方网站

在我的情况下,我花了好几年的作为一个学生最感兴趣的理论,在引力更平淡的数值分析、统计、建模和应用数学。与数学,学生变得着迷玩这样一个容易制定问题像哥德巴赫猜想,可能会进入其他领域的数学,也许纽结理论,微分和代数几何、统计,甚至偏离工程的一些分支。,事实上,我需要结果来自不同领域的数学在我的职业生涯作为一个咨询的数学家。

你其他工具存在的状态,可以为相同的目的这个工具箱,即。,枫和数学。虽然他们确实存在,这个目的很好,不是每个人都有钱支付这些工具。例如,我不要自己的象征性的工具箱,也没有数学的副本。对于那些有兴趣的人这个工具箱可以解决的问题,他们可以做他们的工作没有额外的投资。

最后,这个工具箱可以教导别人的方法来构建自己的工具箱,各种各样的模板。另外,一个很容易扩展这些工具与变量精度浮点运算,或任意大小的分数。当足够多的人有当前matlab版本中,我将把这个工具箱使用新方法发现了在matlab处理类和OOP代码。

所以我真的很抱歉,这个工具是对你不感兴趣。但是,只有说你生活在有限的视野。只这一次,扩大视野。学习一些数学。

约翰

凯文

我不理解这个函数的效用。

确定其整洁有数百位对于一些深奥的项目,但是我们的目标是什么。举个例子的使用这个工具套件。这是证明一个定理吗?设计一个新的压缩算法吗?模拟流体流动问题吗?我们的目标是什么?

在我这一行工作,3位有效数字是我们所希望的。4,我们几乎保证合同更新在接下来的5年。但100年代的数字吗?来吧。

请解释为什么计算100 !最后一个地方是任何效用。

顺便说一句,mathematica,枫和其他符号项目多年来一直能够这样做。

约翰D 'Errico

在第一个版本中,我给了新名字几个功能,如阶乘,nchoosek,和刺激。这使得这些功能双输入,但仍然产生一个新品的结果。培特使一个有效的论点,所以我改变了。

在本版本中,已经存在的函数,在matlab重载(以及大量其他增强。)

培特

为用户引入新的函数名称不便,重载现有是可取的。

塞巴斯蒂安Randel

伟大的工作!

扎马Aldahiyat

vpi2english是蛋糕上的糖衣。

MATLAB版本兼容性
创建R2007b
兼容任何释放
平台的兼容性
窗户 macOS Linux

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!

VariablePrecisionIntegers / html /