gpt4 book ai didi

f# - 为什么 F# 中的幂运算符仅适用于 float ?

转载 作者:行者123 更新时间:2023-12-02 12:44:32 25 4
gpt4 key购买 nike

我从未见过一种语言有只接受 float 的指数或幂运算符?

例如:

2 ** 2 抛出错误类型“int”不支持任何名为“Pow”的运算符

这个设计决定有正当理由吗?

最佳答案

(**)pown 是两个不同的东西。当您看到 (**) 时,您可以想到使用对数的数学公式。当您看到pown时,它只是一系列乘法。我知道一开始这可能会令人惊讶/令人困惑,因为大多数其他语言不会产生这样的差异(主要是因为整数通常隐式转换为浮点值)。即使在数学中,也存在细微差别:请参阅 Wikipedia entry ,第一个定义仅适用于正整数指数。

由于它们是两个不同(但相关)的事物,因此它们具有不同的签名。这是(**):

^a -> ( ^b ->  ^a) when  ^a : (static member Pow :  ^a *  ^b ->  ^a)

这是pown:

^a -> (int ->  ^a)
when ^a : (static member get_One : -> ^a) and
^a : (static member ( * ) : ^a * ^a -> ^a) and
^a : (static member ( / ) : ^a * ^a -> ^a)

如果您创建自己的类型,则只需拥有 One(*)(/) 即可获取它使用pown。该库将为您执行循环(它已经过优化,而不是简单的 O(n))。

如果您想在类型上使用 (**) 运算符来表示非整数值,则必须编写完整的逻辑(并且它与 pown)。

我认为将这两个概念分开是一个很好的设计决策。

关于f# - 为什么 F# 中的幂运算符仅适用于 float ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5334003/

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