我正在尝试操纵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;
}
任何人都可以解释一下并提供更好的解决方案吗?
答案 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
。