优先规则 - 使用括号和使用srand除法来获取浮点数

时间:2013-10-12 14:36:34

标签: c random floating-point double srand

我正在尝试操纵srand,以便srand按分区返回十进制数。但它不起作用。即使优先规则在划分前优先使用括号,我的代码也不会返回十进制数。

#include <stdio.h>
#include <math.h>

int main(void) {

    double save;

    srand(time(NULL));

    save = (rand() % 100)/ 10;

    printf("%f", save);

    return 0;
}

但是这段代码工作正常,但我对解决方案不满意。

#include <stdio.h>
#include <math.h>

int main(void) {

    double save;

    srand(time(NULL));

    save = rand() % 100;

    save = save / 10;

    printf("%f", save);

    return 0;
}

任何人都可以解释一下并提供更好的解决方案吗?

2 个答案:

答案 0 :(得分:4)

此代码的问题:

double save;
save = (rand() % 100) / 10;

不是运算符的优先级,而是因为除以整数常量10。尝试:

save = (rand() % 100) / 10.0;

如果您想要从区间<0; 10)生成数字,最好这样做:

save = ((double)rand() / ((double)RAND_MAX + 1.0)) * 10.0;

将产生更精确的结果,也将更均匀地分布:)

答案 1 :(得分:0)

运算符优先级无关
rand()返回int类型并将其除以整数也将返回int值。您必须将(rand() % 100)/ 10投射到double

save = (double) (rand() % 100)/ 10;  

在第二种情况下

save = rand() % 100;

rand() % 100获得的价值提升为double。然后将save除以10给你正确的答案,我,e,double