参考
https://en.wikipedia.org/wiki/Double-precision_floating-point_format可知,double 一般只有 15~17 位的有效十进制位,测试用例计算两点叉积中间过程如下:
double
357732783707.917969-357732779387.523071 = 4320.394897
357732779286.109924-357732783655.354370 = -4369.244446
357732687769.262695-357732687720.413086 = 48.849609
long double
357732783707.917946-357732779387.523051 = 4320.394895
357732779286.109919-357732783655.354386 = -4369.244467
357732687769.262668-357732687720.413108 = 48.849560
可以看到在 16 位之后,double 和 long double 的结果已经不同了,这导致了最后结果的不同。
PS:这样计算完,还需要再*0.5 再取绝对值,才是三角形面积吧。