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?
一种直接的解决方案是使用format/2给定的“精度”输出数字。例如:
?- height(1,Y), format("~2f", [Y])。
0.50
Y = 0.49999999999999994。
请注意,浮动始终会导致此类问题,并且在可能的情况下,我建议使用例如有理数。