mieki256's diary



2020/09/18(金) [n年前の日記]

#3 [tic80] TIC-80のスクリプトがエラーを出す問題を調べてたり

自分が以前書いたTIC-80用のスクリプトが、0.70.6 ではエラーを出さないけれど 0.80beta ではエラーを出すあたりが気になって、原因を調べていたり。

どうも、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)
  end
range に 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 は動いちゃう…。何故。

以上です。

過去ログ表示

Prev - 2020/09 - Next
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project