【问题标题】:What is the maximum number of digits that can be stored in a .NET numeric data type.NET 数字数据类型中可以存储的最大位数是多少
【发布时间】:2010-11-29 08:50:14
【问题描述】:

这只是出于好奇。我们知道,对于密码学应用,两个大素数(超过 100 位)相乘以形成公钥的一部分。那么哪种 Microsoft.NET 数字类型可以存储数百位数的最大素数?换句话说,哪种数字数据类型可以容纳 .NET 中的最大整数?我知道使用 8 个字节的 System.Double 可以存储 (1.79769313486232 × 10^308) 的最大值 - 这可能容纳 309 位。但是,System.Decimal 使用 16 个字节,最多可以存储 79228162514264337593543950335,这只有 29 个十进制数字(比 Double 少?)

谢谢, 查克。

【问题讨论】:

  • “每个计算机程序员都应该知道的关于浮点运算的知识” - blogs.sun.com/darcy/resource/Wecpskafpa-StanfordIcme500.pdf
  • 对于 RSA,您也需要较低的有效数字(您正在对 n 进行整数计算),因此您不能使用任何浮点类型(Double,Decimal,...)但需要一个足够大的整数。

标签: .net rsa


【解决方案1】:

如果您使用的是 .NET 4,请查看System.Numerics.BigInteger,它可以存储任意大的整数。

double 存储 309 位数字 - 它有一个很宽的 范围,但它只有 15-16 位的精度。换句话说,如果您将较大的 long 值(例如,在 long.MaxValue 下方的那些)转换为 double 并返回,您将丢失信息。有关更多信息,请参阅我关于 binarydecimal 浮点类型的文章。

【讨论】:

  • 谢谢。这是一个线程外问题 - 如果有人正在准备 70-536 .NET Framework Foundation 考试,我们将不知道您指出的 System.Numerics.BigInteger。 .NET 4 有更新的考试吗?
  • @Chakra:我不知道,恐怕。我并没有真正“做”认证。
猜你喜欢
  • 2012-07-27
  • 1970-01-01
  • 2019-04-03
  • 2014-09-12
  • 1970-01-01
  • 2021-04-08
  • 2011-04-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多