【发布时间】:2014-09-02 21:29:45
【问题描述】:
我不确定这个问题是否已经回答(我在谷歌搜索时找不到)。 我看到http://docs.oracle.com/javase/7/docs/api/java/lang/Math.html 数学类平方根方法返回一个双精度。我在 Eclipse 中用一些具有整数平方根的整数进行了实验 - 4、9,发现它们的平方根总是返回一个小数点后的浮点值 - 4.0、9.0。我很好奇为什么它甚至返回那个额外的小数?我认为整数也可以被视为双值。对我来说,只返回 1 更有意义,因为您可以节省更多内存(我想需要更多内存来存储额外的小数点)我什至测试了它
public static double control(){
return 1;
}
发现只返回 1 是有效的。
【问题讨论】:
-
不,整数不能被视为与双精度数相同。 (int)4 和 (double)4 具有完全不同的内部值。并且大多数整数也不能完全表示为浮点数。 (float)4 实际上是 3.9999999999xxxxxx
-
基本上有近乎无限的浮点数,只有很小的一个子集有精确的翻译。存储该异常列表并且每次都必须检查它以查看您的值是否是“从不精确”规则的例外是零点
-
sqrt函数返回一个double值(出于自然原因,我相信您理解)。该值通常以 8 个字节表示,采用浮点格式(由标准指定)。它没有您看到的十进制数字。当您将其打印到屏幕上时(例如使用printf),您可以指定要打印小数点后的位数。如果这是您想要的,您也可以将其转换为整数(正如您提到的sqrt(4)或sqrt(9)- 那是您可能想要执行此转换的时候)。 -
继续我之前的评论:但
double值本身只是由 64 位数据组成,处理器的 FPU(浮点单元)可以在其上应用任何支持的算术运算(除法,乘法等)。正如您所指的那样,它没有“十进制数字”。根据标准,double的“结构”见en.wikipedia.org/wiki/Double-precision_floating-point_format。 -
根据您的问题和 cmets 判断。我认为您应该阅读更多关于数字如何在内部存储以及整数和十进制数的二进制表示的内容。
标签: java double square-root