PHP hypot() 函数

定义和用法

hypot() 函数返回直角三角形的斜边长度,即 sqrt(x*x + y*y)。该函数可以避免直接计算平方和时可能出现的溢出或下溢问题。

提示:hypot() 是 hypothenuse(斜边)的缩写。该函数也常用于计算二维或三维空间中两点之间的欧几里得距离。

语法

hypot(float $x, float $y): float
参数 描述
x 必需。第一条直角边的长度。
y 必需。第二条直角边的长度。

返回值

返回以 xy 为直角边的斜边长度(浮点数)。

PHP 版本

  • PHP 4+
  • PHP 5+
  • PHP 7+
  • PHP 8+

示例

示例 1:基本用法

<?php
echo hypot(3, 4) . "<br>";   // 5 (3²+4²=25, sqrt(25)=5)
echo hypot(5, 12) . "<br>";  // 13
echo hypot(1, 1) . "<br>";   // 约 1.4142135623731
?>

输出:

5
13
1.4142135623731

示例 2:与直接计算对比

<?php
$x = 1e200;
$y = 1e200;

// 直接计算平方和会导致溢出 (INF)
$direct = sqrt($x * $x + $y * $y);
echo "直接计算: $direct<br>";

// 使用 hypot 可以避免溢出
$safe = hypot($x, $y);
echo "hypot 计算: $safe";
?>

输出:

直接计算: INF
hypot 计算: 1.4142135623731E+200

示例 3:实际应用 - 计算两点之间的距离

<?php
// 计算二维平面上两点 (x1,y1) 和 (x2,y2) 的距离
function distance($x1, $y1, $x2, $y2) {
    return hypot($x2 - $x1, $y2 - $y1);
}

$dist = distance(0, 0, 3, 4);
echo "点 (0,0) 到 (3,4) 的距离为: $dist";
?>

输出:

点 (0,0) 到 (3,4) 的距离为: 5

相关函数

注意事项

重要:
  • hypot() 的主要优势是数值稳定性:即使 xy 非常大或非常小,也不会发生不必要的溢出或下溢。
  • 该函数返回的值始终是非负的(即使参数为负)。
  • 传入非数值类型参数会导致警告(PHP 7+)或 TypeError(PHP 8+)。