gpt4 book ai didi

java - 为什么我们需要在 Scala 中为 Double 传递指数形式的数字?

转载 作者:行者123 更新时间:2023-12-02 13:37:07 26 4
gpt4 key购买 nike

我使用不同的参数在 Scala 中执行了以下示例程序。

object TestScalaWS {
println("Welcome to the Scala worksheet") //> Welcome to the Scala worksheet
3+5 //> res0: Int(8) = 8
1.0E5 //> res1: Double(100000.0) = 100000.0
def abs(x: Double) = if (x<0) - x else x //> abs: (x: Double)Double

def sqrtIter(guess: Double, x: Double):Double =
if (isGoodEnough(guess,x)) guess
else sqrtIter(improve(guess,x),x) //> sqrtIter: (guess: Double, x: Double)Double

def isGoodEnough(guess: Double, x: Double) =
abs(guess*guess-x) < 0.001 //> isGoodEnough: (guess: Double, x: Double)Boolean

def improve(guess: Double, x:Double) =
(guess + x/guess)/2 //> improve: (guess: Double, x: Double)Double


def sqrt(x:Double) = sqrtIter(1.0,x) //> sqrt: (x: Double)Double
sqrt(2) //> res2: Double = 1.4142156862745097
sqrt(4) //> res3: Double = 2.0000000929222947
sqrt(0.001) //> res4: Double = 0.04124542607499115
sqrt(0.1e-20) //> res5: Double = 0.03125
sqrt(0.1e20) //> res6: Double = 3.1622776601683793E9
sqrt(1.0e20) //> res7: Double = 1.0E10
sqrt(1E9) //> res8: Double = 31622.776601684047
sqrt(1000000000) //> res9: Double = 31622.776601684047
sqrt(1E10) //> res10: Double = 100000.0
}

但是 sqrt(10000000000) 相当于 1E10,在 Scala IDE 中给出错误“整数太大”,即使我已将 x 声明为 Double。

我认为存在一些编译器解释问题,但不知道它到底意味着什么。这个问题只存在于 Scala 中吗?或者Java中也存在。 ?或者 Scala IDE 的问题?

谢谢,戈帕尔。

最佳答案

当您输入10000000000时,您尝试定义 Int ,与输入 1 时相同或-35 .

当您输入sqrt(2)时,你的Int隐式转换为 Double ,因为这是您的函数所期望的,并且这样的隐式转换器确实存在。

但是,当您输入 sqrt(10000000000) 时,它在第一步抛出异常:定义整数 10000000000这是一个大于 Ìnteger.MaxValue` 的数字。

重要的是要理解,转换为您想要的类型是在以下之后完成的:

  • 首先为您的输入定义类型(此处不带点或指数的数字被视为 Int )

  • 然后使用选定的类型规则解析输入(这是抛出您的情况的步骤,因为您的号码无法解析为 Int )

关于java - 为什么我们需要在 Scala 中为 Double 传递指数形式的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42925620/

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