0で除算?
撃 2013/5/9(Thu) 22:52:14|NO.53926
駄目駄目な質問なのでスルー覚悟でお聞きします。
HSP3プログラムの動作検証をしております。
実行ファイルやソースは今のところお見せできなくてすみません。
開発マシンでは当然動作します。
次にHSP関係を一切インストールしていないネットブックでも重いながらも動作しました。
最後に家人のデスクトップマシンで最終確認しようと思ったら内部エラー19が出ました。
でも0で除算なんてしていません。
そんなにシビアな計算もしていないと思いますが、
マシン(パーツ)やOSの違いで、実数計算の誤差が出ているという事なんでしょうか?
流星群 2013/5/9(Thu) 22:59:38|NO.53927
自分にはエラーの原因はわかりませんが、
もしかしたらwindowsのバージョンによっての違いなのかも知れませんので
念のため
開発マシン、ネットブック、家人のデスクトップのwindowsが
何か書いておいたほうが良いと思います。
この程度の事しか言えなくてすいません。
check 2013/5/9(Thu) 23:43:21|NO.53928
>マシン(パーツ)やOSの違いで、実数計算の誤差が出ている
マシンによって実数(浮動小数点数)の計算の速度は大きく変わってくるであろうが、
マシンによって演算結果が変わるわけではない。
バグを見つけるためには除算をしている箇所の変数の値を出力するなど、
様々なやり方があるので、目的に会ったデバッグ方法を採るといい。
MIZUSHIKI 2013/5/9(Thu) 23:54:11|NO.53929
環境違いによる0での除算と言うと、
経験的にはホイールスクロール値の読み取りで
0が出てしまい、それで割るといったことをしてしまったことがあります。
私の環境ではホイールを回しても0は検出されないのに、
ユーザーさんには0が出てエラーが発生してしまいました。
そういったところはないか参考までにご確認ください。
;外出先から失礼します。
2013/5/10(Fri) 02:28:41|NO.53932
分かったぜ!
hgcnvaxisの第1パラメータから第3パラメータであるvar_x,var_y,var_zに非数(-1.#IND00)が返ってるわ
で、それを受け取った変数で除算する(分母の計算式の中にその変数もある)とエラーが出るっぽい。
撃 2013/5/10(Fri) 22:13:32|NO.53939
予想外にたくさんのレスありがとうございました。
全く同じ計算の結果を、マシン環境によって0除算とみなす/みなさない
となる原因がちょっと皆目見当つかないのです。
確かなバグであれば、どのマシンでも同じエラーが出ると思うんですね。
入力の類も、getkeyなどを極めて普通に使用しているだけなのです。
あと、今回残念ながらhgcnvaxisの利用は見送っております。
ちなみにマシン構成は、
開発機:Core2DUO E8400でXPsp3。
ノート:Atom N280でXPsp3。
問題のマシン:Pentium DUALCORE E5700でWindows7の64ビット版。
問題のマシンにHSPインストールさせてもらえれば、リスト中にendでも挿入しとけば
何処でエラーが出るくらいは判るとは思いますが、なかなか。
…もうちょっと検証してみます。
ht. 2013/5/10(Fri) 23:10:54|NO.53940
onerrorを仕込んでもう一度エラーを再現させて行番号を調べればいいのではないでしょうか。
osakana 2013/5/10(Fri) 23:30:50|NO.53941
普通に考えたら「0で除算エラー」が出るパターンを纏めてみて
それらが出現する所を探してみる位しか無さそうですね
取り敢えず
if rnd(0)
if 1 \ 0
if 1 / 0
あたりでしょうか。
行番号はonerror内でのそれになる様ですね
onerror *ONERR
mes 1 / 0
stop
*ONERR
mes "実行行:" + __LINE__
暇人 2013/5/10(Fri) 23:35:04|NO.53942
USBメモリにでもHSPのzip版解凍して入れて
その問題のPCで起動してみれば?
後、プラグイン使ってるなら同じプラグイン使ってるサンプルとかも実行してみて
自分の作ったものに問題が有るのか、環境に問題があるのか、ぐらいは確かめないと・・・
撃 2013/5/11(Sat) 01:36:03|NO.53947
原因特定ができました。
プログラムはHSPプラグインのaviplay.dllを利用させていただいております。
以下のスクリプトを実行して適当なaviファイルを選択すると
その横幅、縦幅、トータルフレーム数、トータルタイムを正常に返します。
件のWindows7マシンではトータルタイムつまりaviinfo(3)が0を返します。
dllをダウンロードしなければならずお手数がかかりますが、
もし宜しければお手持ちの環境で0を返すかどうか実験をしていただけると助かります。
(winmmはここでは必要無いですが、一応プログラムで使ってるので入れときました)
#include "aviplay.as"
#include "winmm.as"
screen 0,800,600,0,0,0
vfw_init 1
vsid=0
dialog "avi", 16,"aviファイル"
filename = refstr
if filename == "":end
vfw_load filename,vsid
vfw_getinfo vsid,aviinfo
pos 0,0
mes "幅"+aviinfo(0)
pos 0,20
mes "高さ"+aviinfo(1)
pos 0,40
mes "フレーム"+aviinfo(2)
pos 0,60
mes "時間"+aviinfo(3)
await 5000
end
ZAP 2013/5/11(Sat) 11:02:48|NO.53951
そこまで特定できているのであれば、
除算の前に戻り値を確認して、零であれば除算しない、
あるいは動作に支障をきたさない適当なダミーの値を入れてやれば、
当面は回避できそうな気もします。
撃 2013/5/11(Sat) 12:54:09|NO.53953
トータルタイムの取得にmciコマンドを利用する事で0除算エラーはなくなりました。
これで動くかと思ったら、プログラム自体は動いているものの
肝心の動画再生バッファの更新が全く機能していません。
dll自体が結構古いものなのでWindows7に一部機能が対応していない、というオチのようです。
Windows7(もしかするとVistaも)を動作対象外とするとえらくニッチな
プログラムになりますがまあいいか。お騒がせ致しました。