6
如何将浮点数转换为序数中的整数?将浮点数转换为序数中的整数
我想:
?- integer(truncate(sqrt(9))).
false.
?- integer(round(sqrt(9))).
false.
如何将浮点数转换为序数中的整数?将浮点数转换为序数中的整数
我想:
?- integer(truncate(sqrt(9))).
false.
?- integer(round(sqrt(9))).
false.
谓词,您使用的integer/1
是真的当且仅当其参数是一个整数。由于长期truncate(sqrt(9))
是不一个整数,谓语不 不保持,因此失败这个 项。
至少有两种方法可以得到你想要的东西:
可以使用谓词(is)/2
针对不同数量的表示之间的转换。特别是,请查看算术 函数round
,truncate
和ceiling
。例如:
?- X is round(sqrt(9)). X = 3.
但是请注意,使用浮点数总是很大的问题。例如:
?- X is sqrt(2^10000). ERROR: is/2: Arithmetic: evaluation error: `float_overflow'
还有其他问题,如舍入错误和可能的下溢。
由于浮点数的固有缺点,我强烈建议你使用更普遍的机制,而不是。例如,几个Prolog系统支持有理数和无限精度的整数,而浮点数总是限于机器精度。
如果您需要整数平方根,例如使用有限域约束。有了约束,这足以说明什么持有一个整数 X
是表示正方 根:
?- X*X #= 9, X #>= 0. X = 3.
这也作品较大的整数:
?- X*X #= 2^10000, X #>= 0. X = 1412467032...(1496 digits omitted)
为见clpfd更多信息。