LoginSignup
2
1

More than 5 years have passed since last update.

C++でint型の割り算をしたときのミスを減らす方法

Last updated at Posted at 2017-03-23

私は仕事で,c++を使って数値計算をするのですが,そうすると,良く1/2とかが出てきます.当然コード上に打つのですが,そうすると,たまにint型同士の割り算になってしまい,1/2が0になってしまうことがあります.
そこで,私は数字を打つときには,たとえ整数であっても.0を付けるようにしています.これで,不意にint型同士で割り算してしまうことを防げます.

以下に例を示します.

#include <iostream>
int main() {

    double a;

    a = 5.0 * (1.0 / 4.0);
    std::cout << a << std::endl;//1.25 良い

    a = 5.0 * (1.0 / 4);
    std::cout << a << std::endl;//1.25 良い.4はint型だが,1.0がdouble型のため.

    a = 5.0 * ( 1 / 4 );
    std::cout << a << std::endl;//0 ミス.これは1/4がint型で割り算をされているから.

    return 0;
}

2017年3月26日追記
コメントをもらいました.ありがとうございます.
最終的な計算結果の型を判断するだけではなかなか分からないことがあります.私がやるような数値計算は基本的にすべてdouble型なのですが,数字を直打ちする様なところはどうしてもint型に解釈されてしまうところがあります.
では,直打ちしないで,

#include <iostream>
    int main() {

    double a = 1;
    double b = 4;
    double c = 5;;
    double y = c * (a / b);;
    std::cout << y << std::endl;//1.25 一応okだが美しくない.

    return 0;
}

こうしてしまえば,計算結果には問題無いのですが,これでは教科書的には美しくありませんし,別のバグを誘発する恐れがあります.
例えば,教科書に,

y=c^{\frac{1}{4}}

なんて書かれていたらソースコードにも同じように書きたいわけです.ここでは,以下の書き方とは微妙にニュアンスが違うのです.

y=c^{0.25}

とでも書いてしまうと,1/4と言う書き方に物理的な意味があったり,工学的な意味があったりすることがあるのでソースコードに書くときも,可能な限り教科書や参考文献の書き方をそのまま使いたいのです.
いまは,一行だけで書ける式ですが,数行にわたる式を書くことなんてざらにあります.そういうときに,定数を打ち込む箇所は何カ所も出てきます.
と言うときにたとえ少し面倒でも,数字を打ち込むときは1.0とか4.0と言うように,確実にdouble型にしておきます.

2
1
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1