【发布时间】:2015-07-29 13:23:22
【问题描述】:
在 C# 中,我需要处理非常大(和非常小)的数字,其中小数和双精度不够准确,而且 BigInteger 无法存储数字的分数。
我希望数字具有尽可能长的组成部分,即特征和尾数,只要内存(最好是硬盘)空间允许。
是否有人有一个类或者有一个非常大的数字的系统类型。
我需要能够加、减、除、模、平方、平方根、sin、cos、tan(以及它们的倒数)和乘法。几乎是标准 Decimal/Double 的完整功能(以防我遗漏任何内容)。
不需要表示无穷大,但它会是一个加号*!
一个非常小的数字的例子是:
0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
非常大的数字示例如下:
1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
和
-1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
我更喜欢 ToString() 以上述形式返回数字。科学记数法是可以接受的,但绝不是首选。
四个最重要的要求是:
- 号码的准确性
- 至少,基本的数学运算可以 应用;乘法、除法、加法和减法
- 数量只能受备用内存和硬盘大小的限制。
- 数字必须以字符串形式输出 特征、小数点和尾数,例如100.23、100 或 0.000000054
- 应该支持尾数中的递归
BigInteger 不是可接受的答案。
*如果实现了无穷大,那么我只需要尽可能地实现它,例如(infinity / infinity = 1), (0 / infinity = 0) 等
【问题讨论】:
-
寻找
BigInteger。 -
BigInteger 仅适用于整数。使用 BigInteger 将特征和尾数存储在类中的解决方案,或者可能是浮点实现将是完美的,但 BigInteger 本身不是解决方案。
-
我说您的要求#3减少寻找解决周围0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001的概率。跨度>
-
@OldFart 很有幽默感,哈哈