我对C非常陌生。我想编写我将在Cython中包装的C代码。
这是我的C代码(随机值产生基于种子):使用struct C和cython
#include <math.h>
typedef struct {
int seed;
int bits;
int max;
double fmax;
int value;
} rGen;
rGen rGen_Init(int seed, int start, int bits) {
rGen gen;
int max = pow(2, bits);
gen.seed = seed % max;
gen.bits = bits;
gen.max = max;
gen.fmax = (double) max;
gen.value = start % max;
return gen;
}
double rGen_Next(rGen gen) {
int value = gen.value;
value = (gen.seed << gen.bits) * value/(gen.bits + 1);
value = pow(value, 4);
value = value % (gen.max - 1);
gen.value = value;
return (double) value/gen.fmax;
}
做一个小小的检查,如果在RGen实例的value
属性确实发生了改变:
#include "pyran.c"
#include <stdio.h>
int main() {
rGen gen = rGen_Init(1000, 200, 32); // Create an initialized struct-instance
int i;
for(i = 0; i < 10; i += 1) {
rGen_Next(gen);
printf("%i\n", gen.value);
}
return 0;
}
的输出是:
200
200
200
200
200
200
200
200
200
200
的value
属性的值不改变。 为什么它的行为如此?我必须使用指针吗?如果是这样,我该如何使用它们?
它假设这将是更容易回答,如果会有直C代码显示问题。 – pmr
@pmr请参阅编辑。 :) –