PROLOG - 如何舍入浮点数的小数?

net*_*otz 1 floating-point prolog prolog-toplevel

我在知识库中有这一行:

height(Hipot,Y) :- Y is sin(pi/6)*Hipot.
Run Code Online (Sandbox Code Playgroud)

它计算一个直角三角形的导管之一。

当向 Prolog 询问 的值时Y,即 cathetus,我得到一个不准确的数字:

?- height(1,Y).
Y = 0.49999999999999994.
Run Code Online (Sandbox Code Playgroud)

但实际值是1/2,所以应该输出0.5。我想不准确是因为使用了pi,但我想继续使用它,所以我如何舍入Y到 0.5?

mat*_*mat 5

一种直接的解决方案是使用format/2给定的“精度”输出数字。例如:

?- height(1,Y), format("~2f", [Y])0.50
Y = 0.49999999999999994。

请注意,浮动始终会导致此类问题,并且在可能的情况下,我建议使用例如有理数