我正在将一个算法从C移植到Go。我有点困惑。这是C函数:C long long golang
void gauss_gen_cdf(uint64_t cdf[], long double sigma, int n)
{
int i;
long double s, d, e;
//Calculations ...
for (i = 1; i < n - 1; i++) {
cdf[i] = s;
}
}
而在for循环值“s”被分配给元素“x”数组cdf。这怎么可能?据我所知,一个long double是float64(在Go上下文中)。所以我不应该能够编译C代码,因为我给一个只包含uint64元素的数组分配了一个long double。但是C代码工作正常。
那么有人可以解释为什么这是行得通的吗?
非常感谢。
UPDATE:
函数的C原码可以在这里找到:https://github.com/mjosaarinen/hilabliss/blob/master/distribution.c#L22
即使在C中,你的代码也没有意义,可能有一些[未定义的行为](https://en.wikipedia.org/wiki/Undefined_behavior )。因此,改进C代码以使其符合标准。 –
为什么不在Go中使用现有的高斯分布实现(例如[go-gaussian](https://github.com/chobie/go-gaussian/)),而不是再次移植C代码(并且引入了自己的代码错误)? – dolmen