2013-11-26 47 views
-4

我想檢查是否在c + +中的1/a == 1/b + 1/c
abc是正整數且a是1和10000之間如何檢查1/a == 1/b + 1/c在C++中?

我目前得到由於浮點精度錯誤的答案,我無法找到一個方法來做到不使用浮動這種比較。

如何得到正確答案?

+1

你可以發佈你正在測試的代碼嗎? – newfurniturey

+7

我認爲有一點高中代數可以讓你解決這個問題,而不使用浮點數。 – Barmar

+1

這不是一個真正的C++問題......它應該被重新定義爲一個代數問題...... –

回答

14

我認爲這將有助於你:

1/A = 1/B + 1/C

1 = A/B + A/C

1 =(AC + AB)/BC

BC = AC + AB #NO不再需要除法

9

乘以a*b*c等式的兩側,以得到

b*c == a*c + a*b 
+0

問題是,由於沒有使用除法,所以不需要浮點指針。 –

+0

只要'b'和'c'也是非零的。 –

+2

@ZacHowland:如果任何一個都是零,那麼就沒有「正確的」答案,所以無論這個方程給出的答案都是一樣的答案。但這個問題確實指明瞭「正整數」。 –

4
a(b+c)==b*c 

應該只是罰款:)

1

當對比浮點值它往往不實際的期待,因爲精度問題完全匹配。即使是最簡單的問題,它們也可以起作用。

double d = sqrt(2); 
cout << (d * d) == 2 // false 

相反,你不得不經常測試,看看是否值是一定的誤差

fabs((d * d) - 2) < .001 // true 
+0

小心添加註釋以使用-1? – JaredPar

+0

我沒有投票,但可以完成整個問題而不必擔心浮點數。 –

+0

@ZacHowland我同意,但操作系統明確表示他們正在遇到浮點精度問題。我會猜測他遇到了像我所說的那樣的問題 – JaredPar

0

由於這是一個編程問題中,我假定你的意思int師。

現在,1/a其中a是正int teger類型是01,實際上是當且僅當1a==1

我們可以濫用bool蒙上如下:

(a==1) == ((b==1)+(c==1)) 

,我們避免使用任何和所有的float秒。

0

你可以隨時把它變成一個叫做分數的類。使用公分母將所有3個變量轉換爲相同的分母,然後將b和c相加,然後與a進行比較。