HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
0509
0で除算?11解決


リンク

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も)を動作対象外とするとえらくニッチな
プログラムになりますがまあいいか。お騒がせ致しました。



ONION software Copyright 1997-2023(c) All rights reserved.