双向量数组的log精度误差

C++ log precision error for double vector array?

本文关键字:精度 误差 log 向量 数组      更新时间:2023-10-16

我有双向量数组(vector)及其最大值(1)和最小值(0)。

当我做下面的子操作时,日志给出(1.#INF00000000000000000)的最大值索引为(1 - 1.000000000000001)(双精度)。

如何防止这种精度错误?

log( 1 - array[ i ] );

你是这个意思吗?

if(array[i] >= 1)
  return 0;
else if(array[i] <= 0)
  return std::numeric_limits<double>::infinity();
else
  return log(1 - array[i]);