【发布时间】:2014-01-30 03:48:51
【问题描述】:
我在 lua 中有一个函数,给定 2 个向量,将第一个向量的 lambda 乘数返回到第二个向量,这是我的代码
function Math.vectorLambda( v1,v2 )
local v1Length,v2Length=math.sqrt(v1.x^2+v1.y^2),math.sqrt(v2.x^2+v2.y^2)
if v1Length==0 then
return nil
else
local dotProduct=v1.x*v2.x+v1.y*v2.y
print(dotProduct,v1Length,v2Length,math.abs(dotProduct)==(v1Length*v2Length))
if math.abs(dotProduct)==(v1Length*v2Length) then
if v1.x~=0 then
return v2.x/v1.x
else
return v2.y/v1.y
end
else
return nil
end
end
end
但是,如果
--this is what I get from terminal and I believe that it does not display the whole number--
v1={0.51449575542753,-0.85749292571254}
v2={-10,16.666666666667}
输出是
-19.436506316151 1 19.436506316151 false
也就是说dotProduct和v1Length*v2Length的绝对值不一样... 上面的原因是什么,而不是我瞎了? :(
顺便说一句,函数不稳定..使用完全相同的向量,函数可能具有相同的输出,除了 math.abs(dotProduct)==(v1Length*v2Length) 给出 true 并因此返回正确答案而不是 nil,为什么?
【问题讨论】:
-
正如我所说,有时你会得到正确的结果,但如果你再运行几次,你就有可能得到错误的结果......并且无法获得其输出的函数是无用的。 ..我该怎么办...
-
这行不通。在使用浮点数进行计算时,您总是有可能出现精度错误。你唯一能做的就是要求输出在一定范围内,大约是
+/-ops*float_precision