这是一个小测试用例,用于查看您的 Prolog 系统是否可以作为算术结果返回次正规(没有清零,~FTZ):
/* SWI-Prolog */
?- X is 2.2250738585072011e-308 - 2.2250738585072012e-308.
X = -5.0e-324.
/* Jekejeke Prolog */
?- X is 2.2250738585072011e-308 - 2.2250738585072012e-308.
X = -4.9E-324
这是 API 中的新增功能,在 Prolog 系统中不一样,显示了次规范的参数传递(没有非规范为零,~DAZ):
/* SWI-Prolog */
?- X is 2.2250738585072011e-308 - 2.2250738585072012e-308,
float_parts(X,M,B,E).
X = -5.0e-324,
M = -0.5,
B = 2,
E = -1073.
/* Jekejeke Prolog */
?- X is 2.2250738585072011e-308 - 2.2250738585072012e-308,
sys_float_mantissa(X,M), sys_float_exponent(X,E), sys_float_radix(X,R).
X = -4.9E-324,
M = -1,
E = -1074,
R = 2
结果来自 MacBook Air 2019。