6

我正在计算归一化 2D 点的投影,偶然发现它们比在不归一化的情况下投影点更准确。我的代码是 c++,我用 NDK 编译了一个缺少 FPU(浮点单元)的 android 手机。

为什么当我第一次将值归一化以使它们介于 0 和 1 之间时,我会在 C++ 计算中获得准确性?

如果您使用介于 0 和 1 之间的变量,或者它与为 ARM 设备编译的情况有关,那么在 C++ 中通常是否可以获得算术准确性?

4

2 回答 2

9

你对精度有误解。精度基本上是可用于表示数字尾数的位数。

如果将比例保持在 0 和 1 之间,您可能会发现小数点后的位数似乎更多,但这不是精度,它根本不会根据比例或符号而改变。

例如,无论您的数字是 0.5 还是 1e38,单精度都有 23 位精度。双精度具有 52 位精度。

有关IEEE754 位级表示的更多详细信息,请参阅此答案。

于 2012-05-28T10:26:37.493 回答
3

如果您进行基于矩阵的计算,您可能需要计算矩阵的条件数。本质上,条件数衡量的是答案中数字错误的大小,作为输入中数字错误大小的函数。条件数低的问题被称为条件良好的问题,而条件数高的问题被称为病态问题。

对于某些问题,您可以预处理您的数据(例如,重新调整您测量某些变量的单位),以便条件数变得更有利。例如,一个财务电子表格,其中一些列以美分衡量,而另一些列以数十亿美元衡量,这是病态的。

有关详细说明,请参阅Wikipedia

于 2012-05-28T10:40:05.433 回答