Rom*_*man 22 java floating-point double
你能帮我澄清一下Java中float原语的用法吗?
我的理解是将浮点值转换为double,反之亦然可能会有问题.我读过(很久以前并且不确定新的JVM是否真的存在),浮动的性能要差得多于双倍.当然浮子的精度低于双精度.
我还记得当我使用AWT和Swing时,我在使用float或double时遇到了一些问题(比如使用Point2D.Float或Point2D.Double).
所以,我看到浮动超过双重的两个优点:
它只需要4个字节,而double需要8个字节
Java内存模型(JMM)保证赋值操作是浮点变量的原子,而不是double的原子.
有没有其他情况下浮动比双重更好?你在应用程序中使用float吗?
Nei*_*fey 16
包含浮点类型的原因在某种程度上是历史性的:它代表了从浮点数大小减去4个字节以来的标准IEEE浮点表示,以换取极差的精度是值得做出的权衡.
如今,浮法的用途非常有限.但是,例如,拥有数据类型可以更容易编写需要与使用float的旧系统进行互操作的代码.
就性能而言,我认为浮点和双精度基本相同,除了划分的性能.通常,无论您使用哪种,处理器都会转换为内部格式,进行计算,然后再转换回来,实际计算有效地需要一段固定的时间.在划分的情况下,至少在Intel处理器上,我记得进行除法所花费的时间通常是每2位精度一个时钟周期,因此无论你使用float还是double,都会产生影响.
除非你真的有充分的理由使用它,否则在新代码中,我通常会避免'浮动'.
你刚才给出的两个原因是巨大的.
如果你的3D体积是1k乘1k乘64,然后有很多时间点的数据,然后想制作一个最大强度投影的电影,浮动的一半大小的事实可能是完成之间的差异因为你的内存不足而快速震撼
从线程的角度来看,原子性也是巨大的.
在速度/性能和准确性之间总会有一个权衡.如果你的数字小于2 ^ 31且是一个整数,那么整数总是比浮点数更好地表示这个数字,只是因为精度损失.您必须评估您的需求并针对您的问题使用适当的类型.