【问题标题】:See if number a is closer to c than b查看数字 a 是否比 b 更接近 c
【发布时间】:2016-10-10 04:04:41
【问题描述】:

我目前正在尝试创建一个函数来判断数字 a 是否更接近 c 而不是数字 bc

我曾尝试像这样进行比较:(从c 获取ab 并进行比较)

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

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

在我的脑海中,我认为无论数字(ab)更小,都意味着它会更接近于 c,虽然这可以使用正整数,但当涉及到负整数时它给出了完全错误的结果。

我想知道在PHP 中是否可能有一个in-built function 或者是否有更好的数学方法来实现这一点?

【问题讨论】:

  • abs()
  • 在进行数学运算之前,您可能需要检查每个数字是正数还是负数,以便执行正确的方程式。 @jszobody,我对abs() 也有同样的想法,但如果c 是肯定的,b 是否定的,abs() 会导致错误的结果。
  • @SgtAJ 只取决于你如何使用它 =)
  • (abs($c-$a)>abs($c-$b))? $b:$a;

标签: php function math integer


【解决方案1】:

If (a - c) * (a - c) < (b - c) * (b - c) 会这样做。这解决了负数问题,是我们老猫在 C 中做的方式。

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

分析它。

【讨论】:

  • way us old cats do it in C 瞬间我最喜欢的答案:)
  • 哈。在 C 语言中你必须小心,但不要溢出你的类型。对于某些类型,这样做的行为是未定义的,编译器保留吃掉你的猫的权利。
  • 我明白你的意思 :) 嘿,在我打勾然后你离开之前,我只是一个简单的问题,像这样做一个pow(power)会更有效吗? pow(a - c) < pow(b - c)?
  • 你需要一个大于 0 的偶数才能取消一个负号。但我不喜欢使用pow 对数字求平方,即使好的编译器声称他们已对其进行了优化:pow(x, y) 通常在 C 中实现为 exp (y * log(x)),这显然会引入不精确性。但是我在这里很顽皮,因为这个问题被标记为 php!
  • 啊哈哈一切都好!随心所欲地顽皮;)无论如何,感谢您的回答将其添加到我的代码中,并且效果惊人!真的很感激:)
【解决方案2】:

绝对值最小的总是最接近的。您正在考虑数字线,但如果您知道 2D 或 3D 空间中的向量,则更容易想象。那么两点之间的距离就是它们分量之差的平方和的平方根。一维情况作为两个分量为零的特殊情况而落空。

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

【讨论】:

  • 显然不需要计算平方根,因为它是一种保持顺序的转换。
  • 我觉得应该很清楚了:1D情况不需要计算平方根;我拼出了绝对值。我这样做是因为它解释了它如何适合 3D 向量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-04
  • 2011-08-01
  • 2013-05-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多