Scala 一个简单的计算错误
嗨,我是Scala的新手,下面的行为真的很奇怪。Scala在这个简单的计算中也犯了错误吗?还是我做错了什么? 谢谢Scala 一个简单的计算错误,scala,math,operation,Scala,Math,Operation,嗨,我是Scala的新手,下面的行为真的很奇怪。Scala在这个简单的计算中也犯了错误吗?还是我做错了什么? 谢谢 Scala中的Double是一个64位IEEE-754浮点数,相当于Java的双原语类型,如中所述 根据的性质,Double不一定返回数字的精确值。它归结为一个事实,小数不能总是精确地表示为二进制 斯卡拉,是一个64位IEEE-74浮点数,相当于java的双原语类型,如中所描述的。 根据的性质,Double不一定返回数字的精确值。它归结为一个事实,小数不能总是精确地表示为二进制 为
Scala中的
Double
是一个64位IEEE-754浮点数,相当于Java的双原语类型,如中所述
根据的性质,Double
不一定返回数字的精确值。它归结为一个事实,小数不能总是精确地表示为二进制
<>斯卡拉,是一个64位IEEE-74浮点数,相当于java的双原语类型,如中所描述的。 根据的性质,
Double
不一定返回数字的精确值。它归结为一个事实,小数不能总是精确地表示为二进制
为了更好的精度,您可能需要考虑使用.< /P> < P>实数表示为浮点(32位)和双(64位)。这些是二进制格式,只大致表示实数的完整范围。实数包括所有(可数无限)和(不可数无限)。Double充其量只能表示有理数的一个小的有限子集
双精度浮点编码使用53位尾数(显式存储52位)、11位指数和1位符号。了解IEEE双精度浮点 可以精确表示的整数范围为+/-2^53-1,而指数表示的范围为10^+/-308- 不能在| x |>2^53处精确表示整数x
- 不能精确地表示形式不是k/2^n的分数,其中k,n是整数(k,n在上述限制范围内)。因此,您不能表示1/3、1/5、1/7、1/11等
- 分母相对素数为2的任何有理分式都不能精确表示。任何分数k/P,其中P是除2以外的素数的乘积,k不是P的倍数,都不能用IEEE-754浮点精确表示
由于实数是,有理数是,几乎所有实数都是无理的。实数由浮点(32位)和双精度(64位)表示。这些是二进制格式,只大致表示实数的完整范围。实数包括所有(可数无限)和(不可数无限)。Double充其量只能表示有理数的一个小的有限子集 双精度浮点编码使用53位尾数(显式存储52位)、11位指数和1位符号。了解IEEE双精度浮点 可以精确表示的整数范围为+/-2^53-1,而指数表示的范围为10^+/-308
- 不能在| x |>2^53处精确表示整数x
- 不能精确地表示形式不是k/2^n的分数,其中k,n是整数(k,n在上述限制范围内)。因此,您不能表示1/3、1/5、1/7、1/11等
- 分母相对素数为2的任何有理分式都不能精确表示。任何分数k/P,其中P是除2以外的素数的乘积,k不是P的倍数,都不能用IEEE-754浮点精确表示
由于实数是有理数,几乎所有实数都是无理数。哪里有错?像100这样的实数只有在用浮点表示时才近似。这可能有助于找出错误所在?像100这样的实数只有在用浮点表示时才近似。这可能会有帮助
scala $ Welcome to Scala 2.12.4 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_111).
Type in expressions for evaluation. Or try :help.
scala> val radius:Double = 10.2
radius: Double = 10.2
scala> radius * 10
res0: Double = 102.0
scala> radius * 100
res1: Double = 1019.9999999999999
scala> radius * 1000
res2: Double = 10200.0