C/C++でのint,doubleの扱い方
下記の関数でレイトレーシング法の判別式を実装したのですが、int coefficient_a
やint d
などの変数がint型であると期待していた動作をしてくれません。
もちろん関数の戻り値の型もdouble型にしなくてはなりません。
関数に渡されてくる数は必ず整数です。
int ray_tracing_discriminant(int a, int b, int c, int r, int l, int m, int n){
int coefficient_a = (l * l) + (m * m) + (n * n);
int coefficient_b = -2 * ((a * l) + (b * m) + (c * n));
int coefficient_c = (a * a) + (b * b) + (c * c) - (r * r);
int d = (coefficient_b * coefficient_b) - (4 * coefficient_a * coefficient_c);
return d;
}
内部の計算では加法、乗法しか使っていないのにdouble型でないといけないことなどあるでしょうか?
戻り値は別の関数で0以上か0未満かを判定しているだけです。
int d
の中に-0.5
などの値が入ってきて、それが切り捨てで0になってしまうことで起こるのだと思うのですが...