gpt4 book ai didi

java - 在java项目中抽象浮点精度

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:10:23 24 4
gpt4 key购买 nike

考虑一个执行大量浮点运算的 java 项目,其中效率和内存消耗可能是重要因素 - 例如游戏。如果这个项目针对多个平台,通常是 Android 和桌面,或者更普遍的 32 位和 64 位机器,您可能希望能够构建软件的单精度和 double 版本。

在 C/C++ 和其他低级语言中,这很容易通过 typedef 语句实现。你可以拥有:

typedef float myfloat;

如果您想使用 64 位,只需将其更改为:

typedef double myfloat;

假设您在整个代码中使用 myfloat。

如何在 java 中实现类似的效果?

全局搜索并用“double”替换“float”(反之亦然)有一个巨大的缺点,即破坏与只提供一种浮点精度的外部库的兼容性,其中主要是 java 的某些函数.lang.数学课。

当您希望保持高效并保持内存紧张时(例如,通过使用大量原始类型数组),使用高级多态方法并不理想。

您是否遇到过这种情况?如果遇到过,您认为解决此问题的最优雅方法是什么?

最佳答案

官方Android documentation这是关于 floatdouble 性能的对比:

In speed terms, there's no difference between float and double on the more modern hardware. Space-wise, double is 2x larger. As with desktop machines, assuming space isn't an issue, you should prefer double to float.

因此您不必过分担心性能。只需使用适合解决问题的类型即可。

除此之外,如果您真的想要在 double 和 float 之间切换,您可以将 floatin 点值包装在一个类中并使用它。但我希望这样的解决方案比直接使用任何浮点原语要慢。由于 Java 不支持重载运算符,这也会使您的数学代码更加复杂。想想类似的事情

double d = (a+b)/c;

当使用原语时与

MyFloat d = a.add(b).div(c);

在处理包装器对象时。根据我的经验,多态方法会使代码维护变得更加困难。

关于java - 在java项目中抽象浮点精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23500383/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com