43521


下記の関数でレイトレーシング法の判別式を実装したのですが、`int coefficient_a`や`int
d`などの変数がint型であると期待していた動作をしてくれません。  
もちろん関数の戻り値の型もdouble型にしなくてはなりません。  
関数に渡されてくる数は必ず整数です。

[code]

    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;
    }
    
[/code]

内部の計算では加法、乗法しか使っていないのにdouble型でないといけないことなどあるでしょうか？  
戻り値は別の関数で0以上か0未満かを判定しているだけです。

`int d`の中に`-0.5`などの値が入ってきて、それが切り捨てで0になってしまうことで起こるのだと思うのですが...


CC BY-SA 3.0
2018-04-24T08:59:50.737
43520
2018-04-24T09:46:29.350
2018-04-24T09:09:59.787
28294
28294
question
c++ c opengl
C/C++でのint,doubleの扱い方


一週間ほど悩んでいたのですが質問を投稿してからすぐに自己解決してしまいました。  
`int d`に入る値がオーバーフローしてしまっていたみたいです。  
`long long int d`にすると期待通りの動作をしてくれました。


CC BY-SA 3.0
2018-04-24T09:46:29.350
43521
2018-04-24T09:46:29.350
28294
43520
answer