巧记斜边函数hypot

发布于:2024-12-22 ⋅ 阅读:(16) ⋅ 点赞:(0)

hypot是一个数学函数,源于英文"hypotenuse(斜边)",hypot(a, b)返回直角边边长为a、b的直角三角形(right-angled triangle)的斜边长度。该函数定义在<math.h>头文件中,其功能相当于sqrt(a*a + b*b)。

函数原型:double hypot( double x, double y );

示例代码如下:

#include<stdio.h>
#include<math.h>

double dist(double x1, double y1, double x2, double y2){
    //此代码可替代下面3行代码:return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
    double dx = x1-x2;
    double dy = y1-y2;
    return hypot(dx, dy);
}

int main(){
    double x1=9, y1=5, x2=2, y2=7, y;
    y=dist(x1, y1, x2, y2); //调用函数
    printf("%f\n", y);
    return 0;
}

网上说相比sqrt,hypot可能会使用更精确的算法来避免精度损失,老金试了不少数结果都是一样。

比如将输入值设为:x1=9999, y1=5555, x2=2222, y2=7777

结果:

hypot里的两个参数可以颠倒,也可以为负数,结果不变。这是个数学问题,很好理解。

这个函数的用法没什么难的,关键是hypot、hypotenuse看着比较生分,不太好记。不像sqrt这种使用频比较高的,根本不用记。

当你想秀一下求斜边的神技时,却想不起来怎么写,是不是很尴尬?

从词源来说,hypotenuse是由hypo和tenuse两部分组成所。hypo是个前缀,指“under下面”,tenuse和tense很像,其实它俩是同源的,都来自词根tend,指“stretch延伸”。

什么叫向下延伸呢?不好理解,也不好记,咱们可以找个实物代表一下。最典型的就是水流,高山流水,自上而下,简称“下流”——“下”对应under,“流”对应stretch。要打造这种景观,就需要有一个“斜坡”,而直角形的斜边就类似这样一个斜坡。

不过搞明白这个道理你不一定能记住这个单词,因为中间有断层:hypo为什么是under?tenuse怎么就有延伸的意思?

老金解释不了,这是语言千百年进化的结果。

所以这个单词用词根词缀也未必好记,倒不如直接使用联想记忆:

hypotenuse:hy怀疑(拼音首字母)+ po婆+ten十+use用

→我怀疑这个婆娘被十个人用过了

→我把这个人想“歪”了,我认为她走了“斜”路

→斜边

那么hypotenuse的阉割版hypot呢,也可以照猫画虎:

hypot:hy怀疑+ po婆+t蹄

→我怀疑这个婆娘的蹄子下面垫了增高垫(或者是穿了高跟鞋)

增高垫是斜面、脚面是斜面

→斜边

或者还可以这样:

hypotenuse:h黄老邪+ y摇+pot壶

→黄老邪摇摇晃晃地对着酒壶喝酒

→人也斜、壶也斜、酒也斜

→斜边