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更多信息。