[リストへもどる]
一括表示
タイトル誤差
記事No9882
投稿日: 2011/10/21(Fri) 02:06
投稿者26℃
E3DInit 0, -1, 0, 16, 0, scid1の命令のあとに
a=84.3000
dialog -a
このように、小数にマイナスをかけるとdialogで表示される数値が
84.300003などになるのですが原因はなにでしょうか?

E3DInitの手前で計算しておくと数字がおかしくなることはないようです。

タイトルRe: 誤差
記事No9883
投稿日: 2011/10/21(Fri) 06:52
投稿者おちゃっこ
HSPのデフォルトの状態では
小数はdoubleです。
E3DInitを呼ぶと小数がfloatになります。

floatは確か有効数字が7桁くらいだったと思います。

メタセコイアとやり取りする場合はもう一個気をつけなくてはいけません。
mqoファイルをテキストエディタで開くと分かりますが
mqoに書かれている数値はfloatよりも更に桁数が少ないです。

なので普通にやると
プラグイン中の数値とmqoにしてから読み込む数値に違いが出る可能性があります。

タイトルRe^2: 誤差
記事No9884
投稿日: 2011/10/21(Fri) 11:41
投稿者26℃
hspでfloat型が使えるのですか?
意図した計算ができないので少し困り物ですね。

>プラグイン中の数値とmqoにしてから読み込む数値に違いが出る可能性があります。
そこで今苦戦中です、数字を四捨五入してたら処理速度が落ちたりorz

タイトルRe^3: 誤差
記事No9885
投稿日: 2011/10/21(Fri) 16:59
投稿者おちゃっこ
> hspでfloat型が使えるのですか?
> 意図した計算ができないので少し困り物ですね。

小数の計算精度を指定するC言語の命令があるのです。
DirectXは処理速度を優先するために通常は精度をfloatにします。

HSP上では小数データは8バイトになりますが
上記の関係で精度はfloatになります。

タイトルRe^4: 誤差
記事No9886
投稿日: 2011/10/21(Fri) 17:11
投稿者26℃
>小数の計算精度を指定するC言語の命令があるのです。
>DirectXは処理速度を優先するために通常は精度をfloatにします。
C言語の命令以降ずっとfloatになるということですか?
hspの計算にも影響するみたいですね。

数字をぴったりに合わせるのはあきらめて、誤差も含めて計算させることにしてみたらやりたいことが上手くいきました。
ttp://oirahakobito.seesaa.net/article/231483437.html?1319184027

タイトルRe^5: 誤差
記事No9887
投稿日: 2011/10/21(Fri) 18:26
投稿者おちゃっこ
> >小数の計算精度を指定するC言語の命令があるのです。
> >DirectXは処理速度を優先するために通常は精度をfloatにします。
> C言語の命令以降ずっとfloatになるということですか?
> hspの計算にも影響するみたいですね。

ずっとなります。HSPにも影響します。

> ttp://oirahakobito.seesaa.net/article/231483437.html?1319184027

出来ましたか!
今度、支援ツールの紹介ページに載せますね。