浮点精度问题及解决方案
关键字:Vector, float, precision, rounding algorithm
最近在编写一个矢量运算库,将所有的平面CAD/CAM图形转化为矢量,
采用树形组织:形状 -> 轮廓 -> 段,段有几种基本类型:直线,圆弧,Bezier等,
在计算两个矢量集合的 交,并,减,异或操作时,遇到了严重的问题,
该问题是由浮点数本身不精确造成的,例如:计算直线与圆弧的交点坐标后,反过来检查,你会发现,
交点并没有落在直线上,或者交点到圆心距离并不相等。等等类似问题。并且该误差会随运算次数而累计。
若用一个很小的阀值作为检查的附加条件,会带来大量的算法改动,并且在少数情况下还是会出错。
这是一个Serious, serious, serious problem!
幸好搜索到下列文章:
http://zrusin.blogspot.com/2006/05/precision.html
具体方法还在学习中,但给我看到了一丝胜利的曙光。
本随笔将会在将来修改(future, memo)
浙公网安备 33010602011771号