【发布时间】:2016-11-17 15:12:14
【问题描述】:
我有一个看起来像这样的方法:
float * mutate(float* organism){
int i;
float sign = 1;
static float newOrg[INPUTS] = {0};
for (i = 0;i<INPUTS;i++){
if (rand() % 2 == 0) {
sign = 1;
} else {
sign = -1;
}
float temp = (organism[i] + sign);
printf("bf: %f af: %f diff: %f sign: %f sign2: %f temp: %f\n\n",
organism[i], (organism[i] + sign), (organism[i] + sign)-organism[i],
sign, sign+sign, temp);
newOrg[i] = organism[i] + sign;
}
return newOrg;
}
当 sign 不为 0 时,前两个 "%f"s 相同,第三个为 0,同样将总和放入变量中也无济于事。这让我很困惑!如果需要,我可以发布完整的代码。
输出:
bf: 117810016.000000 af: 117810016.000000 diff: 0.000000 sign: 1.000000 sign2: 2.000000 temp: 117810016.000000
【问题讨论】:
-
organism[]的值是多少?这将有助于看到一行输出。也许您没有精确度来加/减 1。 -
当
sign不为零时?但是sign从不为零... -
如果输入的值非常大,加或减1不会有任何区别,
(organism[i] + sign)-organism[i]将等于organism[i] - organism[i]。 -
你为什么使用花车?看来这段代码执行整数运算
-
此方法将进行相当多的调整,以便以更高级的方式进行变异。添加了示例输出。我刚刚注意到它有时确实有效,但并非总是如此。
标签: c floating-point addition