考虑一个java项目执行大量浮点运算,其中效率和内存消耗可能是重要因素 - 例如游戏.如果此项目针对多个平台,通常是Android和桌面,或者更常见的32位和64位计算机,您可能希望能够构建软件的单精度和双精度构建.
在C/C++和其他低级语言中,这可以通过typedef语句轻松实现.你可以有:
typedef float myfloat;
Run Code Online (Sandbox Code Playgroud)
而你想要去的那一天64位只是改为:
typedef double myfloat;
Run Code Online (Sandbox Code Playgroud)
只要你在代码中使用myfloat.
如何在java中实现类似的效果?
全局搜索并将"float"替换为"double"(或反之亦然)具有突破与外部库的兼容性的巨大缺点,外部库仅提供一种浮点精度,其中主要是java.lang的某些函数.数学课.
当你希望保持高效并保持内存紧密时(例如,通过拥有大量的原始类型数组),使用高级多态方法并不理想.
您是否曾经处理过这种情况?如果是这样,您认为这个问题最优雅的方法是什么?
官方Android文档说明这float与double性能有关:
在速度方面,更现代的硬件之间
float和之间没有区别double.在空间方面,双倍大2倍.与桌面计算机一样,假设空间不是问题,您应该更喜欢双重浮动.
所以你不必过分担心性能问题.只需使用合理的类型来解决您的问题.
除此之外,如果你真的想要能够在double和float之间切换,你可以将你的floatin点值包装在一个类中.但我希望这种解决方案比直接使用任何浮点基元更慢.由于Java不支持重载运算符,它也会使您的数学代码更加复杂.想想类似的东西
double d = (a+b)/c;
Run Code Online (Sandbox Code Playgroud)
当使用原语时
MyFloat d = a.add(b).div(c);
Run Code Online (Sandbox Code Playgroud)
使用包装器对象时.根据我的经验,多态方法使得维护代码变得更加困难.
| 归档时间: |
|
| 查看次数: |
84 次 |
| 最近记录: |