簡體   English   中英

當功效為雙精度時,為什么ZeroBrane studio會將“ ^”評估為非數字

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM