2日目
1日目の方の記事に編集リクエストや間違いを指摘してくれた方本当にありがとうございました。
嬉しくなりモチベーションがバク上がりしました。
03-08 乱数っぽいなにか
ゲームを制作するときに乱数をよく使うらしい
乱数を生成するときは"rand関数" rand()は、0~RAND_MAXの間の値を返値とします。
「サイコロを2回投げて、その和を求めるプログラム」
※rand関数で乱数を生成し6で割る。その値は0~5なので+1する。
実行結果
※rand関数で乱数を生成しRAND_MAX+1で割ると0以上1未満の数字が出てくる。その解に*6をしてint型にすると0~5の数字になる。そこから最後に1を足す。
実行結果
RAND_MAXとは?
RAND_MAXとは、あらかじめ定義されている定数であり、具体的には215-1=32767です。
後者のほうが前者よりも均等に現れると書いているがなぜだろう?
高度な割り算をすることによって確率が変わるのか?
また、後者のほうが計算量が多いので一長一短とのこと。
RAND_MAXはintの最大値になるので、(double)(RAND_MAX + 1)にするとオーバーフローする
※何回実行しても同じ数字になる件について
コンピュータは無茶苦茶な値を取り扱うことが苦手なので、乱数として不自然な挙動をする。
この乱数を擬似乱数という。
乱数を作るときはある初期値から乱数を生成する。その初期値を「乱数種」という。
乱数種を設定する関数は"srand()"
そして、時間と乱数種を組み合わせることでより正確な乱数を生成することができる。
疑似乱数はMT(Mersenne Twister)法が一番質が高いらしい。
03-09
数学でよく使うライブラリの紹介
int abs 整数限定の絶対値
double fabs 少数限定の絶対値
double floor 小数第一位切り捨て
double celi 小数第一位切り上げ
double fmod(x,y) x/yの余り
double modf(x, p) xを整数部と小数部に分離 小数部はpに格納
ややこしいやつを書いた。
数値誤差によるバグにも注意
「型について」
基本double型でもいいが、処理速度が気になるときはfloatを使うときもある。
3dグラフィックを扱う場合など
将来的に3Dゲームを制作したいので使用用途に応じて型を書き分けられるように実践をたくさん積まないと!
03-10 オーバーロード
同じ関数名でも引数が違うと使うことができる。これを”オーバーロード”という。
良い例
int A(int x)
double A(double x)
悪い例
int Func(){return 0;}
double Func(){return 1;}
int Func(){return 0;}
int Func(){return 1;}
03-11 もっとロジカルに
bool型はtrue, falseしかとれない
0と1を使うよりtrue, falseを使うほうがわかりやすい
終わりに
今日はクラスまでやるつもりでしたができませんでした。
明日からはポインタ天国なので楽しみにして寝ます。
明日こそはクラスまでやる!
おやすみなさいzZZ