Php 看看数字a是否比b更接近c

Php 看看数字a是否比b更接近c,php,function,math,integer,Php,Function,Math,Integer,我目前正在尝试制作一个函数,可以判断数字a是否比数字b更接近c 我尝试过这样的比较:(从c中选取a和b,并进行比较) 在我的头脑中,我认为无论哪个数字(a或b)越小,都意味着它将越接近c,尽管使用正整数是有效的,但当使用负整数时,它给出了完全错误的结果 我想知道在PHP中是否有一个内置函数,或者是否有更好的数学方法来实现这一点?如果(a-c)*(a-c)

我目前正在尝试制作一个函数,可以判断数字
a
是否比数字
b
更接近
c

我尝试过这样的比较:(从
c
中选取
a
b
,并进行比较)

在我的头脑中,我认为无论哪个数字(
a
b
)越小,都意味着它将越接近
c
,尽管使用正整数是有效的,但当使用负整数时,它给出了完全错误的结果

我想知道在
PHP
中是否有一个
内置函数,或者是否有更好的数学方法来实现这一点?

如果(a-c)*(a-c)
就可以了。这绕过了负数问题,这就是我们这些老猫在C中的做法

否则,您可以使用
Math.abs(a-c)
,但对于某些类型,另一种方法可能更快,但您需要注意不要溢出您的类型,并且对于某些类型也有可能产生毁灭性的环绕效果


分析它。

绝对值最小的总是最接近的。你可以用一条数字线来思考,但如果你知道二维或三维空间中的向量,你会更容易想象。那么两点之间的距离就是它们的分量之差的平方和的平方根。1D情况属于两个分量为零的特殊情况

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

在做数学运算之前,你可能想检查每个数字是正还是负,以执行正确的等式@jszobody,我对
abs()
也有同样的想法,但是如果
c
是正的而
b
是负的
abs()
会导致错误的结果。@SgtAJ只取决于你如何使用它=)(abs($c-$a)>abs($c-$b))$b:$a<代码>我们这些老猫咪用C做的方式
立刻成为我一直以来最喜欢的答案:)哈。在C语言中,您必须小心,但不要使类型溢出。对于某些类型,这样做的行为是未定义的,编译器保留吃掉你的猫的权利。我明白你的意思:)嘿,在我打勾和你离开之前,有一个简单的问题,只做像这样的
pow
(power)会更有效吗?
pow(a-c)
?需要大于0的偶数幂才能取消负号。但是我不喜欢使用
pow
来平方一个数字,即使好的编译器声称他们优化了它:
pow(x,y)
通常在C中作为exp(y*log(x))实现,这显然会引入不精确性。但是我在这里很淘气,因为这个问题被标记为php!啊哈,一切都好!你想怎么调皮就怎么调皮;)不管怎样,谢谢你的回答,把它添加到我的代码中,它的效果非常棒!非常感谢:)显然,虽然没有必要计算平方根,因为它是一种保持顺序的变换。我认为应该很清楚:1D情况下不需要计算平方根;我拼出了绝对值。我这样做是因为它解释了这是如何适合3D向量的。
double distance = Math.sqrt((x2-x1)*(x2-x1)) = Math.abs(x2-x1)