下記の関数でレイトレーシング法の判別式を実装したのですが、int coefficient_aint 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になってしまうことで起こるのだと思うのですが...