2020/09/18(金) [n年前の日記]
#3 [tic80] TIC-80のスクリプトがエラーを出す問題を調べてたり
自分が以前書いたTIC-80用のスクリプトが、0.70.6 ではエラーを出さないけれど 0.80beta ではエラーを出すあたりが気になって、原因を調べていたり。
どうも、0で除算をしているあたりが怪しい気がする…。
以下のように書き換えたらエラーが出なくなった。
ただ、0.70.6 も、0.80beta も、0 を割ったり、0 で割ったりした際に、「そんな計算はできないよ」的な何かが入ってるっぽいのだよな…。
実行すると、「a=-nan(ind)」と表示される。0.70.6 も 0.80beta も結果は同じ。であれば、0.70.6 で実行した際にもエラーを出して止まりそうなものなのに、0.70.6 は動いちゃう…。何故。
どうも、0で除算をしているあたりが怪しい気がする…。
-- adjust enable local vmax,vmin=0,0 for i=1,#dt do if dt[i]>vmax then vmax=dt[i] end if dt[i]<vmin then vmin=dt[i] end end local range=vmax-vmin for i=1,#dt do dt[i]=math.floor(15*(dt[i]-vmin)/range) dt[i]=clamp(dt[i],0,15) endrange に 0 が入った時に、おかしくなるのではないか…。
以下のように書き換えたらエラーが出なくなった。
-- adjust enable local vmax,vmin=0,0 for i=1,#dt do if dt[i]>vmax then vmax=dt[i] end if dt[i]<vmin then vmin=dt[i] end end local range=vmax-vmin if range == 0 then for i=1,#dt do dt[i] = math.floor(15 * (0.5 * dt[i] + 0.5) + 0.5) dt[i]=clamp(dt[i],0,15) end else for i=1,#dt do dt[i]=math.floor(15*(dt[i]-vmin)/range) dt[i]=clamp(dt[i],0,15) end end
ただ、0.70.6 も、0.80beta も、0 を割ったり、0 で割ったりした際に、「そんな計算はできないよ」的な何かが入ってるっぽいのだよな…。
function TIC() cls(13) a = math.floor(15*(8-8)/0) print("a="..a, 0, 0) b = 10 / 2 print("b="..b, 0, 8) end
実行すると、「a=-nan(ind)」と表示される。0.70.6 も 0.80beta も結果は同じ。であれば、0.70.6 で実行した際にもエラーを出して止まりそうなものなのに、0.70.6 は動いちゃう…。何故。
[ ツッコむ ]
以上です。