gpt4 book ai didi

scala - 通用数字除法

转载 作者:行者123 更新时间:2023-12-02 03:03:41 24 4
gpt4 key购买 nike

作为一般规则,我们可以取任何数字类型的任何值,并将其除以任何数字类型的任何非零值,并得到合理的结果。

212.7 / 6   // Double = 35.449999999999996
77L / 2.1F // Float = 36.666668

我发现的一个异常(exception)是,我们不能将 BigInt 与小数类型(FloatDouble >).

然而,在泛型领域,Integral 类型和 Fractional 类型之间存在着有趣的区别。

// can do this
def divideI[I](a: I, b: I)(implicit ev: Integral[I]) = ev.quot(a,b)

// or this
def divideF[F](a: F, b: F)(implicit ev: Fractional[F]) = ev.div(a,b)

// but not this
def divideN[N](a: N, b: N)(implicit ev: Numeric[N]) = ev.???(a,b)

虽然我很好奇为什么会出现这种情况,但真正的问题是:是否有某种解决方法可以绕过此限制?

最佳答案

原因是因为整数除法和浮点除法是两种非常不同的运算,因此所有数值并不共享共同的除法运算,尽管人类可能会认为它们都是作为“部门”。

解决方法是创建 4 个除法运算:积分/积分、积分/分数、分数/积分、分数/分数。以您认为合适的任何特定于应用程序的方式进行计算。当我为自己编写的计算器执行此操作时,如果可能的话,我将其保留为 Integral,否则转换为 Double。

关于scala - 通用数字除法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40351176/

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