プロローグでfloatを整数に変換するにはどうすればよいですか? フロートをプロローグで整数に変換する
は、私が試した:あなたが使用integer/1
が真である
?- integer(truncate(sqrt(9))).
false.
?- integer(round(sqrt(9))).
false.
プロローグでfloatを整数に変換するにはどうすればよいですか? フロートをプロローグで整数に変換する
は、私が試した:あなたが使用integer/1
が真である
?- integer(truncate(sqrt(9))).
false.
?- integer(round(sqrt(9))).
false.
述語 IFFその引数が整数です。用語truncate(sqrt(9))
は整数ないあるため、述語は ないホールドを行い、従って、この 用語ため失敗します。
あなたは、異なる数の表現の間の変換のための述語(is)/2
を使用することができます壊れ
は、あなたが望む結果を得るには、少なくとも2つの方法があります。特に、算術 機能round
,およびceiling
をチェックしてください。例えば:
?- X is round(sqrt(9)). X = 3.
しかし、浮動小数点数を使用して常に非常に問題であることに注意。例:
?- X is sqrt(2^10000). ERROR: is/2: Arithmetic: evaluation error: `float_overflow'
また、丸め誤差やアンダーフローの可能性もあります。
により浮動小数点数の固有の欠点には、私は強くあなたがより一般的なメカニズムの代わりにを使用することを推奨します。たとえば、いくつかのPrologシステムでは、有理数のと無限の精度の整数がサポートされていますが、浮動小数点は常に機械精度に制限されています。
整数平方根が必要な場合は、たとえば有限ドメイン制約を使用します。より大きな整数の
?- X*X #= 9, X #>= 0. X = 3.
このも作品:
?- X*X #= 2^10000, X #>= 0. X = 1412467032...(1496 digits omitted)
ためclpfdを参照してください制約と、それはが正四角 ルートを示し整数 X
ためを保持しているものを述べることで十分詳しくは。