浮点数 – 在prolog中将float转换为整数

如何在prolog中将float转换为整数?

我试过了:

?- integer(truncate(sqrt(9))).
false.

?- integer(round(sqrt(9))).
false.

解决方法

如果其参数是整数,则使用的谓词整数/ 1为真.由于术语truncate(sqrt(9))不是整数,因此谓词不成立,因此该术语失败.

至少有两种方法可以满足您的需求:

解决方案1:快速而破碎

您可以使用谓词(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'

还有其他问题,例如舍入错误和可能的下溢.

解决方案2:快速而通用

由于浮点数的固有缺点,我强烈建议您使用更通用的机制.例如,几个Prolog系统支持具有无界精度的有理数和整数,而浮点数总是限于机器精度.

如果需要整数平方根,请使用例如有限域约束.对于约束,只需说明表示正平方根的整数X的含义:

?- X*X #= 9,X #>= 0.
X = 3.

这也适用于更大的整数:

?- X*X #= 2^10000,X #>= 0.
X = 1412467032...(1496 digits omitted)

有关更多信息,请参见clpfd.

相关文章

前言 最近项目做完,用户需要兼容IE,于是开展了兼容性的调整工作。边调整边想感叹IE真是个沙雕。。特将...
前言 有些属性不是很常用,但是工作中遇到了,记录一下,方便学习。 1、text-indent text-indent 属性规...
前言 政府网站会遇到公祭日的时候,网站整体颜色变灰的情况。今天正好调了一下。在此把解决方案分享给大...
需求 项目里有个消息中心,当有消息的时候,小铃铛图标可以晃两下,提示当前有信息。 实现过程 书写css...
html代码 css代码 效果图
在一些界面上 , 如果每个icon都去找图片还是相当麻烦的 , 直接使用css画出icon就方便的多了 , 下面两个...