c 如何判斷兩個浮點數相等或者大小問題

2021-08-11 12:19:56 字數 1632 閱讀 1437

sap的面試題之一:

如何判斷兩個浮點數是否相等:

例1:a=1.000001 b=1.0兩個數,一般情況下會認為兩者相等。一般我們會認為寫出**:

例2:a=1000.0001 b=1000.000時,

顯然按照上面的程式,兩者並不相等,但是按照相對誤差(1000.001-1000.00)/1000.000=1.0e-6;所以應該認為兩者相等;

於是我們用相對誤差改寫**:

#include "stdafx.h"

#include#includeusing namespace std;

int main()

{ double a,b;

cout>b)

{ if(fabs(a-b)<=eps*fabs(a))//用相對誤差計算,看兩者是否相等;

{ cout<

但是當輸入:

a=0.0000 b=0.0001時,**//;if(fabs(a-b)<=eps*fabs(a))右端為0;左端不為0;顯然是不相等的,所以仍然不能全面判斷兩個浮點數是否相等;

比較好的方法是將相對誤差和絕對誤差相結合:

#include "stdafx.h"

#include#includeusing namespace std;

bool isequal(float a,float b ,const double eps,const double releps);

int main()

{ double a,b;

cout<

while(cin>>a>>b)

{ double eps=10e-9;//設定絕對誤差閾值,當兩個數絕對誤差很小很小的時候,就認為兩者相等;

double releps=10e-4;//設定相對誤差閾值,當兩個數的相對誤差很小的時候,認為相等

如何判斷乙個浮點數是否為0:

規則:

不可將浮點變數用「==」或「!=」與任何數字比較。

千萬要留意,無論是float 還是double 型別的變數,都有精度限制。所以一定要

避免將浮點變數用「==」或「!=」與數字比較,應該設法轉化成「>=」或「<=」形式。

假設浮點變數的名字為x,應當將

if (x == 0.0) // 隱含錯誤的比較

轉化為if ((x>=-epsinon) && (x<=epsinon))

其中epsinon 是允許的誤差(即精度)。

如何判斷兩個浮點數是否相等

眾所周知,在c c 語言中,兩個整形型別的數字是可以直接用 進行比較的,而兩個浮點型別的資料是不能直接用 符號進行比較的。不能直接進行比較的原因是 1.0000001 和 1.0 這兩個數在絕大多數的情況下,認為它們是相等的,所以經常能看到如下的 c 或者 c if fabs a b eps 0 一...

C 浮點數判斷相等的方法

先看下面一段 include using namespace std int main 看起來最後的執行結果都應該是 其實真正的執行結果都為 因為浮點數在計算機中並不能精確儲存,由於ieee浮點標準表示資料精度有限,浮點運算很容易造成微小的誤差,所以不能用等號判斷浮點數是否相等。採取的方法是設定乙個...

Java中比較兩個浮點數是否相等

public class test public static void isequaloffloat float a,float b 執行結果 使用 符號比較是否相等 true 使用 math.abs 方法比較是否相等 false 使用 math.abs 方法比較是否相等 比較寬容的限制 true...