Lua 为什么ZeroBrane studio会评估^&引用;当幂为双倍时,它不是一个数字

Lua 为什么ZeroBrane studio会评估^&引用;当幂为双倍时,它不是一个数字,lua,double,pow,Lua,Double,Pow,一般来说,我有以下情况。我编写了一个“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

一般来说,我有以下情况。我编写了一个“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))
正如大家可能看到的,如果我们有like(-198^1.01),那么结果必须(分别)是(-208.75257542111)。我在“main.lua”文件中添加了以下行:

但是,这些计算是正确的。我认为这与物体和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)
表达式是
-(198^1.01)
根据。
这个表达式等于-208.75



可能您希望计算
math.abs(x)^y*(xI有这样的“setPower”方法:
函数self:setPower(pP,pI,pD)mpP,mpI,mpD=(tonumber(pP)或0),(tonumber(pI)或0),(tonumber(pD)或0);在打印时返回self end
,它也会打印
Power:{p=1.5,I=1,D=1}
我没有选择使用Lua解释器5.2和5.3,但我正在使用的解释器旁边没有版本,因此我可能认为它是Lua 5.0(我可能错了)“lust”我相信你的意思是“必须”。应该编辑帖子;)完成,尽管这个错误很奇怪。。。它让我发疯了
(-198^1.01==nan)
你能用一个脚本更新这个问题吗?这个脚本可以在没有任何附加函数的情况下运行(
logStatus
getSign
)?另外,调用
Process
函数时使用的参数也不清楚。我在Lua5.1和Lua5.3中都进行了测试,得到了相同的结果。作为传统测试用例,
(-198+0)^1.01
也返回了
-nan
。我认为这可能是lua中的一个bug,但我不能确认这一点,所以我不会将其作为答案发布。顺便说一句,这是lua的事,与zerobrane无关!
local a = (-198^1.01)