33.2. 整数と実数、その計算
C++ で簡単な計算を行ってみましょう。
コンピュータでは 整数 と 実数(小数) を異なるものとして扱っています。詳しくは 14.2. 数値の符号化 を参照することとして、ここではそれぞれの計算の仕方を学びます。
整数とその計算 #
C++ では、小数点を付けずに数値を書くと、整数として扱います。
整数も、前回と同じように cout で出力できます。次のコードを “integer.cc” という名前で保存して、前回と同様に実行してみましょう。
// integer.cc
#include <iostream>
using namespace std;
int main() {
cout << 3 << endl;
cout << -28 << endl;
}
以下のように出力されます。
3
-28
次に、整数の四則演算をしてみましょう。次のコードを “integer_arithmetic.cc” という名前で保存して、実行してみてください。
// integer_arithmetic.cc
#include <iostream>
using namespace std;
int main(){
cout << "-13 + 25 = " << -13 + 25 << endl;
cout << "21 - 2 = " << 21 - 2 << endl;
cout << "2 * 9 = " << 2 * 9 << endl;
cout << "7 / 3 = " << 7 / 3 << endl;
cout << "7 % 3 = " << 7 % 3 << endl;
}
C++ での加減乗除はそれぞれ “+”, “-“, “*”, “/” という記号で表します。なお、整数の計算での “/” は整数の範囲での章を計算します。その際、剰余は “%” という記号で表します。
-13 + 25 = 12
21 - 2 = 19
2 * 9 = 18
8 / 3 = 2
8 % 3 = 1
実数とその計算 #
C++ では、小数点を含む数値を書くと、実数(浮動小数点数)として扱います。
実数も、cout で出力できます。次のコードを “decimal.cc” という名前で保存して、前回と同様に実行してみましょう。
// decimal.cc
#include <iostream>
using namespace std;
int main() {
cout << 20.7 << endl;
cout << -3.5 << endl;
cout << 6.0 << endl;
}
以下のように出力されます。6.0 は 6 と表示されましたが、これは cout が自動的に小数点以下を省略して表示したからで、内部ではあくまで浮動小数点数として処理されています。
20.7
-3.5
6
次に、実数の四則演算をしてみましょう。次のコードを “decimal_arithmetic.cc” という名前で保存して、実行してみてください。
// decimal_arithmetic.cc
#include <iostream>
using namespace std;
int main(){
cout << "-10.2 + 24.3 = " << -10.2 + 24.3 << endl;
cout << "21.1 - 1.6 = " << 21.1 - 1.6 << endl;
cout << "2.3 * 8.9 = " << 2.3 * 8.9 << endl;
cout << "8.1 / 3.0 = " << 8.1 / 3.0 << endl;
}
加減乗除に用いる記号は整数と同じですが、”/” が実数の範囲での章を計算するようになり、剰余 “%” は使えません。
-10.2 + 24.3 = 14.1
21.1 - 1.6 = 19.5
2.3 * 8.9 = 20.47
8.1 / 3.0 = 2.7
整数と実数の計算 #
数式の中で整数と実数を混在させると、自動的に整数を実数に変換したうえで、結果を実数の範囲で計算します。
// arithmetic.cc
#include <iostream>
using namespace std;
int main(){
cout << "8 / 3.0 = " << 8 / 3.0 << endl;
cout << "0.02 * 25 = " << 0.02 * 25 << endl;
}
8 / 3.0 = 2.66667
0.02 * 25 = 0.5
カッコの使用 #
// trapezoid.cc
#include <iostream>
using namespace std;
int main(){
cout << ((3 + 6) * 5) / 2.0 << endl;
}
カッコの部分が先に計算されます。ここでは、((上底 + 下底) * 高さ) までは整数の範囲で行い、小数になる可能性のある除算で初めて実数に変換されるようにしてみました。
22.5