把模拟的中心放在 [0.5, 0.5, 0.5],并使用大小为1的盒子,这样做是一种缺陷吗?

6
我是一名数值物理学家,我看到我的社区中有一些模拟代码使用一个中心为[0.5, 0.5, 0.5]、标准长度为1的3D模拟盒子(因此盒子坐标从0.1.)。在这个盒子里进行了许多物理计算,通常需要最好的精度。
我认为这样做可能被视为缺陷,但我想得到确认。我倾向于认为这是一个缺陷,因为我们在0.附近有更多的数值精度,数值精度在整个盒子中没有很好的平衡。
为了达到良好的平衡,我认为这样的盒子应该:
  • 如果想要盒子中心对称的精度,则应以-0.5为起点,以0.5为终点。
  • 如果想要整个盒子中几乎均匀的精度,则应以1.5为中心,从1.2.
我是正确的还是完全错误的?

http://scicomp.stackexchange.com/? - djechlin
4
如果该域是有界的,那么使用固定点算术可能更合适。在浮点运算中使用[1.0-2.0]域只会使用23位32位或53位64位(假设采用IEEE754)。 - MSalters
我同意使用固定点。如果使用32位或64位整数完成,可能会更高效。而且精度在整个范围内是均匀的。 - Rudy Velthuis
1个回答

7

您说得没错。

从1.0到2.0的精度在整个表面上是均匀的,就像您在使用定点数一样。

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

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


作为一个只知道浮点数因为舍入误差而不完全准确的人,你能解释一下为什么某些数字周围的精度更高吗?此外,精度是否会随着离0越远而降低? - A. Andevski
因为浮点数有三个固定长度的部分:符号位、指数和尾数。`number = sign(+/- 1) * mantissa * 2**exponent。(虽然这不是很准确。搜索一下,你会找到更准确的答案) - Deduplicator
如果您真的很好奇并且喜欢数学,可以访问以下链接:http://steve.hollasch.net/cgindex/coding/ieeefloat.html - StilesCrisis
1
@A.Andevski:由于浮点数大约是对数间隔的,例如在1/64和1/32之间有与1/4和1/2或1/2和1之间一样多的浮点数。 因此,在0到0.5之间,float类型的数字比在0.5到1.0之间多100倍以上; 对于double类型,数量超过1000倍。 - Stephen Canon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接