我现在做的三维建模工具,碰到实数精度导致的结果不正确问题。
用户输入的是实数长度,譬如1.99999微米,那么我会设置一个精度譬如0.001,然后把用户的输入值*1000+0.5变成一个int来处理,而且每增加一个实数点,我都会判断这个实数转换成int后是不是与前面哪个点相同,但实际使用的时候还是有精度误差导致问题,譬如一个线段从0开始,1结束,我现在把它切成三段,有两种方法:
(1) 我先求出每段长度,
l=(int)(1/3.0*1000+0.5)=333,
然后每段长度就是左边点+l,得到三段为[0,333],[333,666][666,999]
那么导致999与右边不再匹配,这样就出现了错误。
(2) 如果我直接求线段左右点位置,譬如中间第二点为
(int)(2/3.0*1000+0.5) = 667,
此时求出的线段就匹配了。
这个例子我是知道的很清楚所以能保证得到准确的值,但有其他很多情况都出现这种类似的问题。
我就想问一下像solidworks,Pro/E,UG,AutoCAD等等很成熟的软件是怎么处理实数的?
欢迎讨论,你的任何建议我都会仔细看。