【发布时间】:2020-08-07 09:04:16
【问题描述】:
我正在尝试为学校项目生成一个介于 1 和 0 之间的随机数。有几个地方说这应该使用 rand() 并强制转换为浮动来完成。类似于以下内容:
float x = ((float)rand()/(float)(RAND_MAX)) * a;
但是,我发现每当我从 int 转换为 float 时,数字都是不正确的。这个问题导致我使用上面的代码得到不正确的答案
代码:
int rotlat = rand() % 1000;
double newrot = (double) rotlat;
printf("rotational latency: %d\n", rotlat);
printf("new rotational latency: %d\n", newrot);
输出:
rotational latency: 533
new rotational latency: -1841876320
rotational latency: 279
new rotational latency: -1841876320
rotational latency: 148
new rotational latency: -1841876320
rotational latency: 167
new rotational latency: -1841876320
【问题讨论】:
-
1.您的“类似”根本不是您在代码中实际执行的操作。你为什么不听劝告? 2.
%d是printf格式说明符,用于打印ints。传递double是未定义的行为。使用%f。 -
谢谢你我笨
标签: c random floating-point type-conversion int