MathNet实数评估

时间:2018-01-16 20:39:13

标签: c# mathnet

我使用MathNet库,其中child1为-4.09,child2为-4.162。 Expression.Real((double1 - double2))之后的结果返回0.072000000000000064。它应该是0.072。谁能帮助我了解发生了什么?

private static Expression GetSimplifiedExpression(Expression child1, Expression child2, LaTeXTokenType tokenType)
{
    double double1 = Evaluate.Evaluate(null, child1).RealValue;
    double double2 = Evaluate.Evaluate(null, child2).RealValue;

    return Expression.Real((double1 - double2));
}

1 个答案:

答案 0 :(得分:0)

首先,让我们将十进制转换为二进制:

-4.09 = -100.00010111000010100011110101110000101000111101011100001010001111...

-4.162 = -100.00101001011110001101010011111101111100111011011001000101101000...

然后,减去这两个二进制文件。二进制的结果是:

0.00010010011011101001011110001101010011111101111100111011011001...

大约等于十进制0.07199999999999999998

这不完全是0.072000000000000064,但我认为你可以理解它背后的想法。如果您想要准确的结果,可以将double投射到decimal

var decimal1 = (decimal) double1;
var decimal2 = (decimal) double2;