【问题标题】:Java Float Trigonometric OptimizationJava 浮点三角优化
【发布时间】:2020-10-30 22:53:26
【问题描述】:

我正在编写自己的 3D 渲染引擎。根据一般知识,我目前使用浮点值作为我的操作基础。然而,对于旋转矩阵,我需要 java.lang.Math 库中的三角函数,它使用双精度值作为输入和输出。

我想知道您是否可以使用浮点值实现三角函数的优化版本,从而提高性能。

【问题讨论】:

  • 在内部,您应该使用双精度值。为什么要使用 float 而不是 double?
  • 虽然在性能方面,计算似乎不受任何选择的影响,浮点数节省 50% 的存储空间,因为它们是 32 位而不是 64 位。
  • 是的,它们节省了 50% 的存储空间。您期望有多少 100 的百万分?双精度比浮点数更好。是的,我有时会在 Blender 上制作 3d 图形。
  • 嗯,虽然这是真的,但我认为对于 3D 游戏引擎来说,6dps 的精度已经足够了。我的意思是额外的小数位对您有什么帮助?
  • 您有没有打算旋转或缩放对象?相信我,您需要免费获得的所有精度。

标签: java math optimization floating-point trigonometry


【解决方案1】:

你可以。 Math 方法,如 sin(),是 native

您可以在自己的类中编写自己的native 方法,然后进行基准测试以查看您是否真的获得了什么,因为JIT 可能知道如何优化标准Math 方法,但无法优化自定义native方法。

【讨论】:

    【解决方案2】:

    Math.sin()Math.cos()Math.tan() 在汇编中实现,因此任何自定义实现都将处于严重劣势。

    floatdouble 的转换以及反之亦然对性能的影响可以忽略不计。因此,如果您想使用float 来节省内存,请继续。但是,考虑到这是 Java,我不会太担心节省内存。

    【讨论】:

      猜你喜欢
      • 2015-11-04
      • 1970-01-01
      • 1970-01-01
      • 2013-11-06
      • 2022-10-15
      • 1970-01-01
      • 2013-06-12
      • 2012-06-26
      • 2014-02-23
      相关资源
      最近更新 更多