[C++]Doubleタイプ判定が等しい場合は使用できません==
4613 ワード
doubleタイプは==で等しいのはなぜだめなのかを判断する
メモリにおける浮動小数点数の記憶メカニズムは整数数と異なり、丸め誤差があり、コンピュータにおいて任意の実数1を近似で表す.例を挙げる
上のコードcは3億9千万~に等しいはずですが、cの値は1ステップで見ると3.8999999999999999です.
2.だから私たちは==で判断すると次のような問題があります.
3.結果として、コンソールから出力がない
正しい書き方
Epslionを1 e-8と定義し、Epslionはギリシャ記号の中で極小数を表す.ここでは1*10の-8乗をとる.
abs(c-d)
メモリにおける浮動小数点数の記憶メカニズムは整数数と異なり、丸め誤差があり、コンピュータにおいて任意の実数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)