Profile
HN:gp-hss
職業:高校生
趣味:3DCG
言語:C全般
環境:VC++ 2008 EE
3DCG:Softimage Mod Tool
自己紹介:
ゲームプログラマー目指して勉強している者です。
現在 C++ 修得にむけて頑張っています。
Began study since 2009/8/21
ゲームプログラマー目指して勉強している者です。
現在 C++ 修得にむけて頑張っています。
Began study since 2009/8/21
Entry
(07/31)
(06/13)
(02/22)
(02/21)
(02/20)
Latest TB
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
ふぅ~む。
だめだなこりゃ。
そもそも無理があったんだ。
浮動小数点数の精度で表すことのできる桁を超えちゃってるから・・・・。
どうもです。
どうやらこのシリーズも Part.4 に行く前に終わっちゃいそうです。
当然のことながら時間というものは小さければ小さいほど動きが激しいですよね。
つまりは、小数点以下が低ければ低いほど数値の動きが激しいということです。
しかも、何度か計測時間を比較したところどれもナノ秒以上の桁はちゃんとあります。
しかし最後の桁がほとんど 8, 6, 4, 0 のどれかで値をとっているのです。
そこで思いました(遅すぎですが)。
こりゃ~浮動小数点数の精度を超えちゃってるなと。
double型 で保障されている精度は 6桁 までです。
ですので余裕で超えちゃっているわけです。
だから少数点以下が低ければ低いほど精度が低いのか・・・。
ちなみに long double の型の変数に格納してもさして変化はありません。
(精度は処理系依存だと思うので、あなたのパソコンでは違うかもしれません。)
だから、たぶん小数点以下中ごろから数値が狂ってきていると思われます。
たぶん数値が丸められているのかな?
ゆえに、各桁の数値がかぶってきてしまうのです。
でも、一応これに対処するためプログラム中ではどの桁から数値をとってくるか変えています。
それでもあまり変化はありません。
これが第一の問題です。
第二の問題には、いくら処理時間が違うとはいえ小数点以下上位の数値は同じようなものになってしまいます。
だからこそ、小数点以下下位の方から数値を取ってきたいのに浮動小数点数の精度を超えてしまっているせいで値が丸められます。
ゆえに、同じような数値ばかりが返ってきてしまうのです。
よって生成される乱数も同じような数値ばかりになってしまいます。
例えば、乱数を生成する範囲を 0 ~ 100 までとした場合、1桁の乱数は 1 ばかりが頻出します。
2桁の乱数も同じような数値ばかりが頻出します。
よって、ものすごく精度の悪いものになってしますのです。
これらの問題から無理があるなと感じました。
少なくとも今の僕の実力では解決することは難しいです。
しかし!
今回のプログラミングは大変勉強になりました。
いろいろな知識が得られたと思います。
これからはたぶんゲームを作っていきますのでどうぞお見届けください。
(てぇ~ことは結局のところ Part.4 はお目にかかんないの?・・・・・・・・・。)
PR