为什么Haskell prelude 的atan2 函数定义在RealFloat class 中?
Why is the Haskell prelude's atan2 function defined in the RealFloat class?
为什么 atan2
是 RealFloat
class 的一部分而不是(有点奇怪的命名)Floating
class 的一部分?
我不明白它在逻辑上如何依赖于 Real
(我理解为非抽象数字的 class,因为它们可以被转换对自己的一些 Rational
近似值)。
我也不明白为什么它与 RealFloat
的任何其他成员有关,这些成员与打包和解包 exponent/mantissa 表示有关。
(潜在的亲密选民:我不只是在抱怨 Haskell 数字塔。我真的认为这个问题有答案,我只是把注意力放在了错误的地方才看到它。 )
我想它会来自如何处理复数。 atan2
函数适用于 (x, y)
坐标,但这不适用于复数值,因为两个复数值代表与 4 个实数值相同的信息量。 atan2
对于复数没有任何意义,但 atan
肯定有。由于 atan2
对于任何处理角度的程序来说都是一个非常重要的函数,它在 RealFloat
中的位置很可能是由于实用性而不是纯数学。
为什么 atan2
是 RealFloat
class 的一部分而不是(有点奇怪的命名)Floating
class 的一部分?
我不明白它在逻辑上如何依赖于 Real
(我理解为非抽象数字的 class,因为它们可以被转换对自己的一些 Rational
近似值)。
我也不明白为什么它与 RealFloat
的任何其他成员有关,这些成员与打包和解包 exponent/mantissa 表示有关。
(潜在的亲密选民:我不只是在抱怨 Haskell 数字塔。我真的认为这个问题有答案,我只是把注意力放在了错误的地方才看到它。 )
我想它会来自如何处理复数。 atan2
函数适用于 (x, y)
坐标,但这不适用于复数值,因为两个复数值代表与 4 个实数值相同的信息量。 atan2
对于复数没有任何意义,但 atan
肯定有。由于 atan2
对于任何处理角度的程序来说都是一个非常重要的函数,它在 RealFloat
中的位置很可能是由于实用性而不是纯数学。