gpt4 book ai didi

c - 级联 hypot() 安全吗?

转载 作者:太空狗 更新时间:2023-10-29 17:22:04 25 4
gpt4 key购买 nike

我想计算三维和四维 vector 的范数(长度)。我正在使用 double float 并希望小心避免不必要的上溢或下溢。

C 数学库提供hypot(x,y) 用于计算二维 vector 的范数,注意避免中间计算中的下溢/溢出。

我的问题:使用 hypot(x, hypot(y, z))hypot(hypot(w, x), hypot(y, z)) 分别计算三维和四维 vector 的长度?

最佳答案

这很安全,但是很浪费:你只需要计算一次sqrt(),但是当你级联hypot()时,你会调用sqrt( ) 每次调用 hypot()。通常我可能不关心性能,但这可能降低结果的精度。你可以自己写:

double hypot3(double x, double y, double z) {
return sqrt(x*x + y*y + z*z);
}

等这样会更快更准确。我认为任何人在您的代码中看到 hypot3() 时都不会感到困惑。

标准库 hypot() 可能有避免溢出的技巧,但您可能并不关心它。通常,hypot()sqrt(x*x + y*y) 更准确。参见 e_hypot.c在 GLibC 源代码中。

关于c - 级联 hypot() 安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30199890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com