【发布时间】:2014-04-05 11:42:34
【问题描述】:
我需要使用逗号前 8 位和逗号后 8 位的数字进行操作,例如12345678,12345678。
如何在不损失精度的情况下执行除法、乘法和求和运算,并且我想执行快速计算。
你有什么建议?我在 Visual Studio 2013 中工作,C#。
【问题讨论】:
-
一个long似乎符合你的要求...它的范围是
–9,223,372,036,854,775,808 to 9,223,372,036,854,775,807,也就是19位... -
如果您将两个小数点前 8 位和小数点后 8 位的数字相乘,您的结果(不损失“准确性”,无论在您的上下文中意味着什么)是 16 + 16 位。至于除法 - 你会几乎总是失去准确性(想想 1.0 / 3.0)。您必须定义您愿意在最终结果中接受的准确度。使用
double,您将获得 15 位数字 - 但如果您的系统有long double(128 位),那么您就可以使用了。根据msdn.microsoft.com/en-us/library/9cx8xs15.aspx - VS2013 实现了 80 位long double。 -
好吧,我需要如果我得到像 0,000000001 这样的数字,那么它将被舍入到 0,00000001(到逗号后有 8 位数字并且大于结果的最接近的数字)所以 1.0/3.0 =0.33333334 Long Double 不够,我需要可以存储 8 个十进制数字的东西。
-
System.Decimal 可以轻松搞定,精确到 28 位有效数字。
标签: c# visual-studio-2013 bignum