.NET 数字数据类型可以存储的最大位数是多少
这只是出于好奇。我们知道,对于密码学应用,两个大素数(超过 100 位)相乘即可形成公钥的一部分。那么哪种 Microsoft.NET 数字类型可以存储最大的数百位质数?换句话说,哪种数字数据类型可以容纳 .NET 中最大的整数?据我了解,使用 8 个字节的 System.Double 可以存储最大值 (1.79769313486232 × 10^308) - 这可能可以容纳 309 位数字。但是,System.Decimal使用16个字节,最多可以存储79228162514264337593543950335,这只有29个十进制数字(比Double更少的数字?)
谢谢, 查克。
This is just out of curiosity. We know that for cryptology applications two large prime numbers (of more than 100 digits) are multiplied to form a part of the public key. So which Microsoft.NET number type can store the largest prime numbers, of hundreds of digits ? In other words which numeric data type can accommodate the largest whole number in .NET ? I understand that System.Double which uses 8 bytes, can store a max value of (1.79769313486232 × 10^308) - this probably accommodates 309 digits. However, System.Decimal uses 16 bytes and can store a max of 79228162514264337593543950335 which is only 29 decimal digits (lesser digits than Double ?)
Thanks,
Chak.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您使用的是 .NET 4,请查看
System.Numerics.BigInteger
可以存储任意大的整数。double
确实不存储 309 位数字 - 它的范围很宽,但它只有 15-16 位精度。换句话说,如果您将较大的long
值(例如那些略低于long.MaxValue
的值)转换为double
并返回,您将丢失信息。请参阅我关于 binary 和 十进制 浮点类型了解更多信息。If you're using .NET 4, have a look at
System.Numerics.BigInteger
which can store arbitrarily large integers.double
does not store 309 digits - it has a wide range, but it only has 15-16 digits of precision. In other words, if you convert largelong
values (e.g. those just belowlong.MaxValue
) todouble
and back you'll lose information. See my articles on binary and decimal floating point types for more information.