浮点文字

时间:2013-03-31 06:55:19

标签: z3

我有两个关于编写IEEE浮点常数的问题,正如Z3的FPA逻辑所接受的那样:

首先,在this question中,Christoph使用了这个例子:

 ((_ asFloat 11 53) roundTowardZero 0.5 0))

我想知道最后0表示什么?我试过了:

 ((_ asFloat 11 53) roundTowardZero 0.5))

这似乎也有效。 Rummer的paper似乎也不需要最后的0;所以我很好奇它扮演的角色。

其次,当我从Z3获得一个模型时,它会打印浮点文字,如下所示:

 (as +1.0000000000000002220446049250313080847263336181640625p1 (_ FP 11 53))

如何解释p1后缀?还有哪些其他后缀?

谢谢..

1 个答案:

答案 0 :(得分:3)

感谢你指出这些问题。它们都是因为输入或输出中的浮点文字没有达成一致的标准。

示例中的最后0表示(二进制)指数,即(... 0.5 1) == 1.0。我们之所以添加这个,只是因为如果无法单独指定数字,数字有时会占用大量空间。这样,我们通常可以非常简洁地指定它们。

输出中的p1后缀表示二进制指数,即e8表示10^8,后缀p8表示2^8。 Z3目前只使用二进制指数,因此这里总会有一个p后缀,但这可能在将来发生变化。数字的其余部分给出足够的十进制数字来表示精确的结果。

请注意,SMT社区尚未就输出格式达成一致。这可能在将来发生变化。例如,有人讨论是应该用IEEE位矢量格式还是在实数和非IEEE位向量之间的中间格式。