C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C / C ++でfloatとdoubleを比較するための最も効果的な方法は何ですか?


ここでは、CまたはC++を使用して2つの浮動小数点データまたは2つのdoubleデータを比較する方法を説明します。浮動小数点/倍精度の比較は、整数の比較とは異なります。

2つの浮動小数点またはdouble値を比較するには、比較の精度を考慮する必要があります。たとえば、2つの数値が3.1428と3.1415の場合、精度0.01までは同じですが、その後は0.001のように同じではありません。

この基準を使用して比較するには、ある浮動小数点数を別の浮動小数点数から減算した後の絶対値を見つけ、その結果が精度値よりも小さいかどうかを確認します。これにより、それらが同等であるかどうかを判断できます。

#include <iostream>
#include <cmath>
using namespace std;
bool compare_float(float x, float y, float epsilon = 0.01f){
   if(fabs(x - y) < epsilon)
      return true; //they are same
      return false; //they are not same
}
bool compare_float(double x, double y, double epsilon = 0.0000001f){
   if(fabs(x - y) < epsilon)
      return true; //they are same
      return false; //they are not same
}
int main() {
   float x, y;
   x = 22.0f/7.0f;
   y = 3.1415f;
   if(compare_float(x, y)){
      cout << "They are equivalent" << endl;
   } else {
      cout << "They are not equivalent" << endl;
   }
   if(compare_float(x, y, 0.001f)){
      cout << "They are equivalent" << endl;
   } else {
      cout << "They are not equivalent" << endl;
   }
   double a, b;
   a = 2.03547415;
   b = 2.03547428;
   if(compare_float(a, b)){
      cout << "They are equivalent" << endl;
   } else {
      cout << "They are not equivalent" << endl;
   }
   if(compare_float(a, b, 0.000001f)){
      cout << "They are equivalent" << endl;
   } else {
      cout << "They are not equivalent" << endl;
   }
}

出力

They are equivalent
They are not equivalent
They are not equivalent
They are equivalent

  1. C++での直方体の体積と表面積のプログラム

    直方体とは何ですか? 直方体は、長方形の6つの面を持つ3次元オブジェクトです。つまり、辺の長さと幅が異なります。立方体と直方体の違いは、立方体の長さ、高さ、幅が等しいのに対し、直方体ではこれら3つは同じではないことです 直方体の特性は次のとおりです- 6つの顔 12個のエッジ 8つの頂点 以下は立方体の図です 問題 長さ、幅、体積が与えられた場合、タスクは直方体の総表面積と体積を見つけることです。ここで、表面積は面が占めるスペースであり、体積は形状に含めることができるスペースです。 直方体の表面積と体積を計算するには、式があります 表面積=2(| * w + w * h

  2. サイファーパンクは誰で、彼らは何を提唱していますか?

    ニュースサイクルを支配する暗号通貨で、サイファーパンクコミュニティは再び前面に出てきました。ブロックチェーンテクノロジーの使用が増加しているということは、サイファーパンクとして識別される個人の数が世界中で急速に増加していることも意味し、政府や法執行機関に懸念をもたらしています。 しかし、サイファーパンクとは誰ですか、彼らはどこから来たのですか、そして彼らは何を望んでいますか? サイファーパンクとは何ですか?その歴史は何ですか? サイファーパンク運動には正確な生年月日はありません。それでも、その起源は1970年代半ばにさかのぼることができ、米国政府がData Encryption Stand