存储极大数字的好方法是什么? (例如,572e6561)在C#中

时间:2015-04-01 00:28:04

标签: c# math numbers

我的第一个想法是实现一个将系数存储为double的类,将10 ^ X存储为int / short。

我想使用工程符号而非科学符号,因为它对最终用户来说更简单。

如果有这样做的项目,我似乎无法找到它们。

我知道System.Numerics.BigInteger存在,但它很慢。我真的希望高速在移动设备上执行许多计算。 我只想将数字存储为工程符号。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

如果你不需要很多精确度,只需要很大的精度,那么我会说使用两个值来表示尾数和指数。对两者使用整数将更接近内部如何处理浮点数。但是至少在尾数中使用浮点可能会更容易实现许多操作,代价是几位尾数精度。

C具有frexpldexp等函数来分别处理浮点数的尾数和指数。我不知道任何C#或.NET,但也可能有相似的功能。

如果你也使用双倍作为指数,你理论上真的大数字。但是如果那个指数不精确,由于四舍五入,那么你根本就不知道指数,这使得尾数毫无价值。因此,如果你需要足够大的数字来考虑这些事情,你需要为指数使用一些大整数,或者可以完全丢弃尾数,并将这些大数字表示为具有近似指数的2的幂。