首页 > 解决方案 > 尽可能完美的十进制算术

问题描述

我在 C# 中使用十进制类型来避免二进制浮点算术引入的错误,但在处理导致小数点后无限位数的除法时仍然会出现精度错误。而在进行此类计算时使用分数格式手动完成时,它可能会产生完美的结果。考虑以下几点:

decimal a = 32;
decimal b = 65;
decimal c = 130;

decimal d = a / b * c;

d 的计算结果为 63.999999999999999999999999999M。但是如果我们手动使用分数格式,我们可以很容易地找到 64。

是否有这样的库将这种算术组织成分数格式并在可能的情况下进行完美的计算。

Windows 上的计算器似乎正在这样做。

标签: c#math

解决方案


BigRational似乎是一个好方法:

decimal a = 32;
decimal b = 65;
decimal c = 130;

Numerics.BigRational d = (Numerics.BigRational)a / b * c;

decimal e = (decimal)d;

e有价值64


推荐阅读