親歷浮點數計算精度導致錯誤

v0->v1是一條朝右下的線段,用下面代碼計算點v3在直線上方還是下方
v0x = -254.923599
v0z = 365.348907
v1x = -249.52359
v1z = 360.148895

v3x = -251.361771
v3z = 361.919006
x = v0x + (v1x-v0x)*(v3z-v0z)/(v1z-v0z)
y = v0z + (v1z-v0z)*(v3x-v0x)/(v1x-v0x)
print(x,y) #-251.36178101398212 361.9189963568999
顯然(x,v3z)在線段右邊,因爲x>v3x
而(v3x,y)在線段下面,因爲y

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章