我正在將一個算法從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