この間のラジアン変換の続き

melponさん:
誤差に関しては、value_t を float ではなく boost::rational にすればうまくいくかもしれませんね。

なコメントを頂いたのでやってみた訳ですが、
結論から言うと無理でした。\(^o^)/


boost::rational つまり、有理数で値を保持する場合、


(角度×180)

                        • -

π


見たいになるんだけど角度が実数なので、自ずと分子も実数になってします。
しかし、boost::rational だと整数しか分子分母を表現することができない。
(ちなみに分子分母が有理数だと問題なく計算出来る。)


試しに、boost::raitonalとやってみると

error C2297: '%=' : 無効です。右オペランドには型 'float' が指定されています。

と、エラーが出てくる。



一番手っ取り早い解決方法は角度も有理数で表すのが楽なんだけどイマイチ現実的じゃない気がする。
そんな機能があったとしても処理が重くなりそうだし。
うーん、有理数を使って誤差を無くすのは良いところ突いてるんだけどなー。
ゲームプログラムだと特に『誤差』がいつも付き纏ってくるよねー。


ちなみに、角度を整数限定にすれば、boost::rational を使うことで誤差はなくなりました。
あとどうでもいいけど分数の表示方法が分からね。