[C++]Doubleタイプ判定が等しい場合は使用できません==

4613 ワード

doubleタイプは==で等しいのはなぜだめなのかを判断する
メモリにおける浮動小数点数の記憶メカニズムは整数数と異なり、丸め誤差があり、コンピュータにおいて任意の実数1を近似で表す.例を挙げる

#include "pch.h"
#include <iostream>
int main()
{
	double a = 4;
	double b = 0.1;
	double c = a - b;	//3.9
}

上のコードcは3億9千万~に等しいはずですが、cの値は1ステップで見ると3.8999999999999999です.
2.だから私たちは==で判断すると次のような問題があります.
#include "pch.h"
#include <iostream>
#define Epslion 1e-8
int main()
{
	double a = 4;
	double b = 0.1;
	double c = a - b;	//3.9
	double d = 3.1 + 0.8;	//3.9
	if (c == d)
		std::cout << c;
	system("PAUSE ");
}

3.結果として、コンソールから出力がない
正しい書き方
Epslionを1 e-8と定義し、Epslionはギリシャ記号の中で極小数を表す.ここでは1*10の-8乗をとる.
#include "pch.h"
#include <iostream>
#define Epslion 1e-8
int main()
{
	double a = 4;
	double b = 0.1;
	double c = a - b;	//3.9
	double d = 3.1 + 0.8;	//3.9
	if (abs(c - d) < Epslion)
		std::cout << c;
	system("PAUSE ");
}

abs(c-d)