这只是出于好奇。我们知道,对于密码学应用程序,两个大的素数(超过100位)被相乘以形成公钥的一部分。那么哪个Microsoft.NET数字类型可以存储数百个最大的素数?换句话说,哪种数值数据类型可以容纳.NET中最大的整数?我理解使用8个字节的System.Double可以存储最大值(1.79769313486232×10 ^ 308) - 这可能容纳309个数字。但是,System.Decimal使用16个字节并且可以存储最大值79228162514264337593543950335,这只是29位十进制数字(比Double小的数字?)
谢谢, 泽。
答案 0 :(得分:2)
如果您使用的是.NET 4,请查看可以存储任意大整数的System.Numerics.BigInteger
。
double
不存储309个数字 - 它有一个宽范围,但它只有15-16位精度。换句话说,如果您将较大的long
值(例如long.MaxValue
之下的值)转换为double
并返回,则会丢失信息。有关详细信息,请参阅有关binary和decimal浮点类型的文章。