【发布时间】:2017-12-22 19:21:49
【问题描述】:
我正在将一个算法从 C 移植到 Go。我有点困惑。这是 C 函数:
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 代码,因为我将一个 long double 分配给一个只包含 uint64 元素的数组。但是 C 代码运行良好。
那么有人可以解释一下为什么会这样吗?
非常感谢。
更新:
函数的原始C代码可以在这里找到:https://github.com/mjosaarinen/hilabliss/blob/master/distribution.c#L22
【问题讨论】:
-
即使在 C 中,您的代码也没有意义,并且可能有一些 undefined behavior。因此,请改进 C 代码以使其符合标准。
-
为什么不直接使用 Go 中现有的高斯分布实现(例如 go-gaussian),而不是再次移植 C 代码(并引入您自己的错误)?
标签: c go long-double