Prolog 截断(7^sqrt(8)-8^sqrt(7))可以通过CLP(FD)解决吗?

Prolog 截断(7^sqrt(8)-8^sqrt(7))可以通过CLP(FD)解决吗?,prolog,clpfd,Prolog,Clpfd,CLP(FD)是一个伟大的序言。它将Prolog的大NUM扩展到约束和标记。但它是万能的吗?例如,我们能算出这个整数值吗: truncate(7^sqrt(8)-8^sqrt(7)) = ? Prolog CLP(FD)解决方案是什么样的?或者有其他推荐的方法来确定答案,如CLP(?)或其他什么?使用浮点运算,我们可能无法100%确定截断结果是什么。通过浮动,我们得到一个近似值x~可能与真实值x不符: SWI-Prolog (threaded, 64 bits, version 8.1.21

CLP(FD)是一个伟大的序言。它将Prolog的大NUM扩展到约束和标记。但它是万能的吗?例如,我们能算出这个整数值吗:

 truncate(7^sqrt(8)-8^sqrt(7)) = ?

Prolog CLP(FD)解决方案是什么样的?或者有其他推荐的方法来确定答案,如CLP(?)或其他什么?

使用浮点运算,我们可能无法100%确定截断结果是什么。通过浮动,我们得到一个近似值x~可能与真实值x不符:

SWI-Prolog (threaded, 64 bits, version 8.1.21)

?- X is 7, Y is 8, Z is X**sqrt(Y)-Y^sqrt(X).
X = 7,
Y = 8,
Z = 0.5348772168447056.
通过使用区间算法,我们可以获得更多的置信度。如果区间算术结果指向区间[x1,x2],那么我们可以确定真x在该区间内:

ECLiPSe Version 7.0 #52 (x86_64_nt)

?- X is breal(7), Y is breal(8), Z is X^sqrt(Y)-Y^sqrt(X).
X = 7.0__7.0
Y = 8.0__8.0
Z = 0.534877216844194__0.53487721684518874

由于间隔完全在[0,1]之内,因此截断将为零。

使用浮点运算,我们可能无法100%确定截断结果是什么。通过浮点运算,我们得到的近似值x~可能与真实值x不符:

SWI-Prolog (threaded, 64 bits, version 8.1.21)

?- X is 7, Y is 8, Z is X**sqrt(Y)-Y^sqrt(X).
X = 7,
Y = 8,
Z = 0.5348772168447056.
通过使用区间算术,我们可以获得更高的置信度。如果区间算术结果指向区间[x1,x2],那么我们可以确定真x在该区间内:

ECLiPSe Version 7.0 #52 (x86_64_nt)

?- X is breal(7), Y is breal(8), Z is X^sqrt(Y)-Y^sqrt(X).
X = 7.0__7.0
Y = 8.0__8.0
Z = 0.534877216844194__0.53487721684518874

因为间隔完全在[0,1]之内,所以truncate将为零。

我没有尝试过这个,但值得一看。我没有尝试过这个,但值得一看。