java具有浮点基元类型的目的是什么?
你能帮我澄清一下float原语在Java中的用法吗 我的理解是,将浮点值转换为双倍,反之亦然可能会有问题。我读到(很久以前,不确定新JVM是否真的如此)float的性能比double差很多。当然,浮点数的精度比double低 我还记得,当我使用AWT和Swing时,我在使用float或double时遇到了一些问题(比如使用Point2D.float或Point2D.double) 因此,我只看到浮动优于双精度的两个优点:java具有浮点基元类型的目的是什么?,java,floating-point,double,Java,Floating Point,Double,你能帮我澄清一下float原语在Java中的用法吗 我的理解是,将浮点值转换为双倍,反之亦然可能会有问题。我读到(很久以前,不确定新JVM是否真的如此)float的性能比double差很多。当然,浮点数的精度比double低 我还记得,当我使用AWT和Swing时,我在使用float或double时遇到了一些问题(比如使用Point2D.float或Point2D.double) 因此,我只看到浮动优于双精度的两个优点: 它只需要4个字节,而double需要8个字节 Java内存模型(JavaM
是否有其他情况下浮动比双精度更好?您在应用程序中使用float吗 你刚才给出的两个理由是巨大的 如果你有一个1k乘1k乘64的3D体积,然后有很多数据的时间点,然后想制作一部最大强度投影的电影,事实上float是double大小的一半,这可能是快速完成和抖动之间的区别,因为内存不足 从线程的角度来看,原子性也是巨大的
在速度/性能和准确性之间总会有一个折衷。如果您有一个小于2^31的数字和一个整数,那么整数总是比浮点更好地表示该数字,这只是因为精度损失。您必须评估您的需求,并针对您的问题使用适当的类型。因此,是的,浮动的优点:
还有人提到这类似于short vs int参数,但事实并非如此。除long之外的所有整数类型(包括boolean)在Java内存模型中都存储为4字节整数,除非存储在数组中。我想你提到存储时就把它搞定了,浮点数是大小的一半 对于处理大型浮点数数组的应用程序,使用浮点数可能会显示出比双倍数更好的性能,因此内存带宽是限制因素。通过从
double[]
切换到float[]
并将数据大小减半,可以有效地将吞吐量提高一倍,因为在给定的时间内可以获取两倍的值。虽然cpu需要做更多的工作来将浮点值转换为双精度值,但这与内存提取并行进行,提取时间更长
对于某些应用程序,精度的损失可能值得用性能的提高来换取。然后再次…:-) 包含浮点类型的原因在某种程度上是历史性的:它代表了一种标准的IEEE浮点表示法,从那时起,将浮点数的大小减少4个字节以换取极低的精度是一种值得权衡的选择 如今,浮动的用途相当有限。但是,例如,拥有数据类型可以更容易地编写需要与使用float的旧系统进行互操作的代码 就性能而言,我认为float和double本质上是相同的,除了分区的性能。通常,无论使用哪种格式,处理器都会转换为其内部格式,进行计算,然后再转换回来,而实际计算实际上需要固定的时间。在除法的情况下,至少在英特尔处理器上,正如我所记得的,除法所花费的时间通常是每2位精度一个时钟周期,因此,使用浮点还是双精度确实会有所不同
除非您真的有充分的理由使用它,否则在新代码中,我通常会避免使用“float”。在某些情况下,double可能比float的运算速度更快。但是,这要求所有内容都适合一级缓存。使用浮点数,缓存线中的数据量可以增加一倍。这可以使一些程序的运行速度几乎提高一倍
SSE指令也可以并行处理4个浮点而不是2个浮点,但我怀疑JIT是否真的使用了这些浮点。不过我可能错了。“在我看来,java拥有浮点的唯一有价值的原因是向后兼容性。”你在前面列出了
float
…蛊惑人心的两个优点时这么说?也许他可以说得更好(“何时使用float
而不是double
?”),但蛊惑人心?如果int的范围更大,短于int有什么好处?这里的答案是一样的。@Travis G:1)我认为(也许我错了!)在生产系统中,我们负担不起双倍数组,但我们可以冒险使用浮点数数组,这种情况非常罕见。2)AtomicDouble可以用于多线程应用程序。@jweyrich:我只是说赋值操作。阅读这里的第8.4项:作为字段,整数类型都需要4字节,但当存储为数组时则不需要。例如,短[]每个索引需要2个字节。是的,非常正确。(除了long,它实际上存储在两个插槽中)。值得注意的是,在英特尔CPU上,内部表示为80位,这与32位浮点和64位双精度都不同。所以在这两种情况下都会发生转换。是的,绝对——对不起,当我说“无论使用哪种[…]转换为其内部格式”时,我认为这一点很清楚。但是,是的,我完全同意。MP3的存在在某种程度上是历史性的