C/C++言語でRPGを作ってみるスレ3
■ このスレッドは過去ログ倉庫に格納されています
0186標準C専 ◆382ingG3ec
2006/01/09(月) 14:22:38あの関数は、手持ちにある材料の個数を、製品1つに必要な材料の量で割って、いくつ作れるかを計算する関数です。
んで、材料の必要量は小数点以下も使って現したかったので、
アイテムの構造体にdouble(またはfloat)を使うのは先に決めていたんです。
そうでないと、表示とかでいちいち計算しなおさないといけないので。
んで、floorは、ついでに使ってみたかったってだけなのでいいのですが、
(int型/double型)で計算する時には自動的に型変換が行われるので、
(double型)/(double型)で計算してくれるから、問題は無いはず、だったんですよね。
だから、{int number= int number/ double volume } でもよさそうだったんですけど、
実際にやってみたら、うまくいかなかったんです。
int number が 10で返るはずが 9になったりして。
どうも計算機上の2進数での丸め誤差というのが問題っぽいのですが、よく分からなくて…
とりあえず、あれで直ったのであれでやっておいたんですけど。どうなんでしょうね?
ちなみに、テスト用に下の関数を作ってみたのですけど、処理系依存で結果が変わったりしますか?
http://himatanuki.hp.infoseek.co.jp/cgi-bin/uploader/src/up0055.lzh
■ このスレッドは過去ログ倉庫に格納されています