浮動小数点の四則演算
浮動小数点の四則演算を行いましょう。浮動小数点の足し算・引き算・掛け算・割り算を行います。
double型を使った64bit浮動小数点の四則演算
double型を使った64bit浮動小数点の四則演算です。浮動小数点を出力する場合は、フォーマット指定子には「%f」を使います。
#include <stdio.h>
int main(void) {
double num1 = 1.45;
double num2 = 4.67;
// 足し算
double num_add = num1 + num2;
// 引き算
double num_sub = num1 - num2;
// 掛け算
double num_mul = num1 * num2;
// 割り算
double num_div = num1 / num2;
printf("Add %f\n", num_add);
printf("Subtract %f\n", num_sub);
printf("Multiply %f\n", num_mul);
printf("Division %f\n", num_div);
}
出力結果。
Add 6.120000 Subtract -3.220000 Multiply 6.771500 Division 0.310493
float型を使った32bit浮動小数点の四則演算
float型を使った32bit浮動小数点の四則演算です。浮動小数点リテラルのfサフィックスを使って、float型にしています。浮動小数点を出力する場合は、フォーマット指定子には「%f」を使います。
#include <stdio.h>
int main(void) {
float num1 = 1.45f;
float num2 = 4.67f;
// 足し算
float num_add = num1 + num2;
// 引き算
float num_sub = num1 - num2;
// 掛け算
float num_mul = num1 * num2;
// 割り算
float num_div = num1 / num2;
printf("Add %f\n", num_add);
printf("Subtract %f\n", num_sub);
printf("Multiply %f\n", num_mul);
printf("Division %f\n", num_div);
}
出力結果。
Add 6.120000 Subtract -3.220000 Multiply 6.771500 Division 0.310493
浮動小数点演算の特徴
浮動小数点演算の特徴です。
正確な値ではなく誤差が存在する
浮動小数点は、2進数で表現できる数を除いて、内部的には誤差が発生しています。
たとえば、0.5, 0.25, 0.125などは、2進数で0.1, 0.01, 0.001と表現できますから、誤差はありませんが、そうではない数の場合は、数学で扱う正確な値とは誤差が発生しています。
浮動小数点演算は0除算してもエラーにならない
浮動小数点演算は、整数演算と異なり、0除算しても、エラーになりません。nan(Not A Number)と呼ばれる値が設定されます。整数除算のように計算前にチェックする必然性はありません。
無限大という値を表現できる
doubleやfloatで表現できる値の最大値を超えた場合は、Infと呼ばれる無限大の値が設定されます。符号に応じて、正の無限大、負の無限大があります。
同じ0でも、符号が異なる0が存在する
同じ0でも、符号が正の0と符号が負の0が存在します。正の0と負の0は、比較演算では、等価とみなされますが、内部表現が異なり、それを意識する演算では異なる結果になります。
CPUによって計算結果が異なる場合がある
double型は64bit浮動小数点を表現しますが、実はCPUは、64bitの精度を超えて、計算している場合があります。ひとつの例として、IntelのCPUは、80bitの浮動小数点計算用の領域を持ちます。
つまり、64bit浮動小数点としての本来予想される計算結果と、異なる場合があるということです。
C言語ゼミ


