C#中令人难以置信的巨大且难以置信的小数字(不仅仅是整数)

Kni*_*ins 1 c# math class

在C#中,我需要使用非常大(和非常小)的数字,其中decimal和double不够准确,BigInteger无法存储数字的分数.

我想让数字具有长的组件,即特征和尾数,因为内存(并且最好是硬盘驱动器)空间将允许.

有人有一个类或者是否有一个非常大的系统类型.

我需要能够加,减,除,模,平方,平方根,sin,cos,tan(和它们的反转)并乘以数字.几乎是标准十进制/双精度的完整功能(如果我错过了任何).

Infinity不需要代表,但它会是一个加号*!

一个非常小的数字的例子是:

0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
Run Code Online (Sandbox Code Playgroud)

和非常大的数字的例子是:

1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
Run Code Online (Sandbox Code Playgroud)

-1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
Run Code Online (Sandbox Code Playgroud)

我更喜欢ToString()以上述形式返回数字.科学记数法是可以接受的,但绝不是首选.

四个最重要的要求是:

  1. 数字的准确性
  2. 至少,可以应用基本的数学运算; 乘法,除法,加法和减法
  3. 该数字必须仅受备用内存和硬盘驱动器的大小限制.
  4. 数字必须以特征,小数点和尾数等形式输出为等效字符串,例如100.23,100或0.000000054
  5. 应该支持尾数中的重复

BigInteger不是一个可接受的答案.

*如果无穷无尽,那么我只需要尽可能地实现它,例如(无穷大/无穷大= 1),(0 /无穷大= 0)等.

Ada*_*dam 6

使用BigInteger.它代表一个任意大的有符号整数.

  • 使用`Tuple <BigInteger,int>`,您可以用科学计数法保存所有值. (15认同)
  • @fubo"对于哪个double不够准确"并不一定意味着OP想要存储分数 - "double"也不足以存储许多大整数. (2认同)
  • @ 9Deuce足够公平.鉴于迄今为止的答案,他删除了它很奇怪...... (2认同)