// postgresql geo_ops.c
Datum
dist_pc(FunctionCallInfo fcinfo)
{
Point *point = ((Point *) ((Pointer) ((fcinfo->args[0].value))));
CIRCLE *circle = ((CIRCLE *) ((Pointer) ((fcinfo->args[1].value))));
float8 result;
result = float8_mi(point_dt(point, &circle->center),
circle->radius);
if (__builtin_isnan (result)) {
return Float8GetDatum(result);
}
if (result < 0.0)
result = 0.0;
return Float8GetDatum(result);
}
postgres里面有涉及nan与0.0比较,毕昇生成的指令fmaxnm,应该使用fcmp指令。当前通过修改代码后规避。在 C 语言标准中,任何浮点数与 NaN 的比较(包括 ==、!=、>、<、>=、<=)均返回 false