BigInt有标准ML / NJ(BigInt for Standard ML/NJ)

2019-07-30 10:37发布

是否有一个Java BigInt有相当于标准ML? 当溢出时,正常的int类型抛出异常。

Answer 1:

是的,看到IntInf结构。



Answer 2:

官方SML'97标准基础库中引入了如int,IntInf,的Int32,Int64的,LargeInt等结构的动物园

要真正使用它们在实践中,使事情按预期工作,使他们有效地工作,你需要在手头的SML实施密切关注。

  • 实现一个家庭模仿C和Java的内存布局,这样的Int32将是一个真正的32位计算机字(但溢出检查),并Int64的64位机器字。 SML / NJ是一个典型的例子,它的小INT arithmentic是快,但它的大INT arithmentic缓慢。

  • 实施方式的另一个家族来自符号计算(LISP或计算机代数),其中聚/ ML是一个显着的例子的背景。 在这里,你有INT = IntInf = LargeInt默认情况下,并实施第一次使用(部分)的本机Word作为近似,直到溢出,然后切换到在堆中分配(如盒装值)非常大的整数。 保利/ ML采用了那么大一部分GNU MP库。

因此,内部/ IntInf长达非常有效的作为你的应用程序即将整数,而不是特定大小的机器的话:在的Int32象征模式将不适合在32位硬件的一个字,由于被要求额外的标记位。 因此,一些算法,实际上是对文字的运算会降低,对32位硬件的例子SHA1。

在另一方面,高于字长短整型堆分配大的int隐升级提供比BigInt有在Java中更好的东西,因为你不会需要较小的值全部对象的开销:42将只是一些位图案中的寄存器(具有附加标记位),而不是在堆上的重框。



Answer 3:

该BigInt有相当于被称为LargeInt。 见这些讲义 ,看看如何INT(又名int)和LargeInt之间转换的一些功能。



Answer 4:

虽然这是你问的不完全是,你实际上并不希望一个等同于Java的BigInt有类。 Java的BigInt有类实现O代表乘(N ^ 2)时间(基本上乘以它的教小学的方式),而不是为O(n log n)的,这是可能的。 这是非常重要的,因为很多琐碎BigInt有节目根本不与n ^ 2版本。



Answer 5:

那么,INT把讨厌的限制上的东西一样计算排列。 SML需要一个大的数字类型多数民众赞成在更自然的使用。



文章来源: BigInt for Standard ML/NJ