[英]Why does ZeroBrane studio evaluates “^” as not a number when the power is a double
正如通常所說的,我有以下情況。 我編寫了一個“ main.lua”文件,其中包括另一個文件,該文件的對象定義具有以下方法:
function self:Process(vRef,vOut,bNeg)
mErrO = mErrN
mErrN = (bNeg and (vOut-vRef) or (vRef-vOut)) -- Refresh error state
logStatus(nil,"MER= "..mErrO.." > "..mErrN)
local errS = getSign(mErrN)
-- P-Term
logStatus(nil,"S P: >> "..tostring(errS))
local errP = mErrN; logStatus(nil,"0 P: >> "..tostring(errP))
errP = errP^mpP; logStatus(nil,"1 P: >> "..tostring(errP))
errP = math.abs(errP); logStatus(nil,"2 P: >> "..tostring(errP))
errP = errP*errS; logStatus(nil,"3 P: >> "..tostring(errP))
眾所周知,如果我們喜歡(-198 ^ 1.01),則結果必須分別為(-)(-208.75257542111)。 我在“ main.lua”文件中添加了以下行:
local a = (-198^1.01)
local b = ( 198^1.01)
local c = ( 0^1.01)
logStatus(nil,"-------------Pow: {"..a..","..b..","..c.."}")
但是,這些計算正確。 我認為它與對象以及ZeroBrane必須使用舊版本的Lua有關。 奇怪的是,當冪參數為1,2,3,4 ...時,它工作正常。 程序輸出如下:
-------------Pow: {-208.75257542111,208.75257542111,0}
MER= 0 > -198
S P: >> -1
0 P: >> -198
1 P: >> nan
2 P: >> nan
3 P: >> nan
任何答案將不勝感激!
在您的第一個代碼中
local errP = mErrN; --> -198
errP = errP^mpP; --> nan
計算的表達式是(-198)^1.01
。
根據提高功率的數學定義並根據pow()
的手冊頁,它為nan
:
pow(x,y)返回一個NaN並引發有限x <0和有限非整數y的“無效”浮點異常。
在第二個代碼中
local a = (-198^1.01)
根據Lua運算符的優先級 ,表達式為-(198^1.01)
。
該表達式等於-208.75 ...
可能您想計算math.abs(x)^y * (x<0 and -1 or 1)
而不是x^y
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.