【问题标题】:Is it a defect to center a simulation in [0.5, 0.5, 0.5] with a box size of 1?以 [0.5, 0.5, 0.5] 为中心,盒子大小为 1 的模拟是否有缺陷?
【发布时间】:2014-06-25 18:29:59
【问题描述】:

我是一名数值物理学家,我在我的社区中看到了一些模拟代码,它们使用中心在 [0.5, 0.5, 0.5] 和标准化长度为 1 的 3D 模拟框(因此框坐标来自 @987654324 @ 到 1.)。在这个盒子里进行了大量的物理计算,通常需要尽可能高的精度。

我认为做这样的事情可以被视为缺陷,但我希望得到确认。我倾向于认为这是一个缺陷,因为我们在0. 附近有更多的数值精度,所以整个盒子的数值精度并没有很好地平衡。

为了有一个很好的平衡,我认为这样的盒子:

  • 如果想要围绕框的中心获得对称精度,则应以0. 为中心(从-0.50.5
  • 如果想在整个框中获得准同质精度,则应以1.5 为中心(从1.2.

我是正确的还是完全错误的?

【问题讨论】:

  • 如果域是这样有界的,不动点算法可能更合适。在 FP 中使用 [1.0-2.0] 域将仅使用 32 位中的 23 位,或 64 位中的 53 位(假设 IEEE754)。
  • 我同意定点。如果这是使用 32 位或 64 位整数来完成的,那么它的性能可能也会更高。并且精度在整个范围内都是一致的。

标签: c++ floating-point precision floating-accuracy numerical-methods


【解决方案1】:

你是对的。

从 1.0 到 2.0 的精度将在整个表面上保持一致,就像您使用定点一样。

从 -0.5 到 0.5 的精度在中心点附近最高,在边缘附近较低(但仍然相当好)。

从 0.0 到 1.0 的精度将在 (0.0, 0.0) 角附近最高,在 (1.0, 1.0) 角附近最低,因此它的行为会稍微不均匀。

【讨论】:

  • 作为一个只知道 float 由于舍入误差而不完全准确的人,您能解释一下为什么某些数字的准确度比其他数字高吗?另外,距离 0 越远,准确率会下降吗?
  • 因为浮点数具有三个固定长度的部分:符号位、指数和尾数。 `数字=符号(+/- 1)*尾数* 2**指数。 (虽然这不是很准确。搜索,你会找到更准确的答案)
  • steve.hollasch.net/cgindex/coding/ieeefloat.html 如果你真的很好奇并且喜欢数学。
  • @A.Andevski:因为浮点数大约是对数间隔的,所以在 1/64 到 1/32 之间的浮点数与在 1/4 到 1/32 之间的浮点数一样多1/2 或 1/2 和 1。因此,0 和 0.5 之间的floats 是 0.5 和 1.0 之间的 100 多倍;对于double,有 1000 多倍。
猜你喜欢
  • 2021-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
  • 2018-02-01
  • 1970-01-01
  • 2014-09-07
相关资源
最近更新 更多