我在 3.0 计算能力上使用 C for CUDA,并且必须使用内置的双精度对数函数。我发现为此我应该使用double log(double x)
函数(文档)。但是,如果我在双精度范围内传递一个非常小的数字(例如double x = 6.73E-42
),
log(x)
函数返回-Infinity
. 在 JavaMath.log()
函数中返回相同的值-94.802
。这是 CUDA 数学库中的错误还是我有什么问题?
编辑:这是我在内核函数中使用的代码
#include "math.h"
extern "C"
__global__ void smallLog(double* in, int n)
{
int i = blockIdx.x * blockDim.x + threadIdx.x;
if (i<n){
double x = in[i];
in[i] = log(x);
}
}