hypot() 函数返回直角三角形的斜边长度,即 sqrt(x*x + y*y)。该函数可以避免直接计算平方和时可能出现的溢出或下溢问题。
hypot() 是 hypothenuse(斜边)的缩写。该函数也常用于计算二维或三维空间中两点之间的欧几里得距离。
hypot(float $x, float $y): float
| 参数 | 描述 |
|---|---|
x |
必需。第一条直角边的长度。 |
y |
必需。第二条直角边的长度。 |
返回以 x 和 y 为直角边的斜边长度(浮点数)。
<?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
<?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
<?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() 的主要优势是数值稳定性:即使 x 或 y 非常大或非常小,也不会发生不必要的溢出或下溢。