2016-06-09 20 views
1

我目前正在嘗試做一個函數,可以告訴如果數字ab更接近cc看看數字a比b更接近c

我試圖做的比較像這樣:(從c採取ab和比較那些)

$c = 10; 
$b = 2; 
$a = 3; 

$b_check = $c - $b; // = 8. 
$a_check = $c - $a; // = 7. 

在我的頭上,我認爲任何數字(ab)較小的手段,它的會更接近c,儘管這些工作使用正整數,但是當它出現負整數時,它會給出完全錯誤的結果。

我想知道是否可能PHPin-built function這個,或者如果有更好的數學方法來實現這個?

+2

看[ABS()](http://php.net/abs) – jszobody

+0

您可能要檢查,如果每個數字是爲了執行正確的公式做你的數學之前積極或消極的。 @jszobody,我正在用'abs()'思考同樣的事情,但如果'c'爲正,'b'爲負'abs()'會導致錯誤的結果。 –

+0

@SgtAJ只取決於你如何使用=) – jszobody

回答

2

If (a - c) * (a - c) < (b - c) * (b - c)會做到這一點。這得到輪負數的問題,也是我們老的貓做它在C的方式

否則,你可以使用Math.abs(a - c) < Math.abs(b - c)但其他方式可以更快對於某些類型的,但你必須要小心不要溢出您的類型,並有潛在的破壞環繞也影響一些類型。

簡介它。

+0

'方式我們老貓在C做'立即我所有的時間最喜歡的答案:) – Jek

+0

哈。儘管不會溢出你的類型,但你必須小心C語言。這樣做的行爲對於某些類型是未定義的,編譯器保留吃掉你的貓的權利。 – Bathsheba

+0

我明白你的意思:)所有這一切,嘿,只是一個簡單的問題之前,我打勾,你走了,是否更有效地做一個'pow'(power)像'pow(a - c) Jek

1

絕對值最小的那個總是最接近的。你用數字來思考,但更容易想象如果你知道2D或3D空間中的矢量。那麼兩點之間的距離就是它們分量之差的平方和的平方根。一維情況作爲兩個分量都爲零的特殊情況而出現。

double distance = Math.sqrt((x2-x1)*(x2-x1)) = Math.abs(x2-x1) 
+0

很明顯,雖然不需要計算平方根,因爲它是一個保存順序的轉換。 – Bathsheba

+0

我認爲應該很清楚:不需要計算1D情況下的平方根;我闡明瞭絕對值。我這樣做是因爲它解釋瞭如何適合3D矢量。 – duffymo

相關問題