C++ 为什么C++;将范数定义为欧几里德范数的平方?
这听起来可能有点像一个反问句,但我在这里问这个问题有两个原因: 我花了一段时间才知道C++ STD::()(和)的方式不同,所以其他人可能在这里遇到错误。C++ 为什么C++;将范数定义为欧几里德范数的平方?,c++,math,C++,Math,这听起来可能有点像一个反问句,但我在这里问这个问题有两个原因: 我花了一段时间才知道C++ STD::()(和)的方式不同,所以其他人可能在这里遇到错误。 我发现将norm()函数定义为与通常认为的范数(或L2范数,或欧几里德范数等)不同(尽管密切相关)的东西很奇怪 < >特别是C++标准库定义复数的()为模(或绝对值)的平方,当复数为a+i*b/< >时,模数为平方乘(a^ 2+b^ 2)。 这违背了我对范数的理解,当被指定为欧几里德范数(对应于这里使用的模)时,它是平方和的平方根。我会参考的
norm()
函数定义为与通常认为的范数(或L2范数,或欧几里德范数等)不同(尽管密切相关)的东西很奇怪幸运的是,还有std::abs()函数,它可以满足您的需要。顺便说一句,欧几里德范数平方可以用作优化,特别是在游戏物理中;如果要比较震级/距离,或出于任何其他原因不需要线性,则可以使用平方距离而不是实际距离,并避免计算平方根
norm(v1) < norm(v2) instead of abs(v1) < abs(v2)
norm(v) < CONSTANT_SQUARED instead of abs(v) < CONSTANT
norm(v1)
(使用另一个答案中提到的abs()是数量级的事实)在这里讨论GCC邮件列表:啊,我不知道字段规范-这当然有道理,或者至少提供了一个合理的解释,说明他们为什么选择定义norm()这样。可能只是巧合。我记得Mathworld说过,当谈论复数或类似复数的数字时,“norm”的用法是模棱两可的。字段范数具有以下优点,如Kevin Reid所指出的,并且它在数字字段中是封闭的事实-“整数复合体”的C++范数是整数,因此可以用整数整数OPS进行优化。