在 PPC 上的 Montavista 上用 C 语言生成浮点数
我有以下简单的程序来生成 1 到 4 之间的浮点随机数:
#include<stdio.h>
#include <stdlib.h>
#include <time.h>
main()
{
int i = 0;
float u;
srand((unsigned)time(NULL));
for(i = 0;i< 10000 ; i++)
{
u = ((4-1)*((float)rand()/RAND_MAX))+1;
printf("The random value for iteration = %d is %2.4f \n", i, u);
}
}
它在 x86 Red Hat Linux 机器上成功生成 1 到 4 之间的浮点随机数。但同一程序在运行 Montavista Linux 的 PPC 上生成 0.0000 作为随机数。
有人可以解释一下为什么以及如何在 PPC Montavista 上进行这项工作吗?
I have the following simple program to generate floating point random numbers between 1 and 4:
#include<stdio.h>
#include <stdlib.h>
#include <time.h>
main()
{
int i = 0;
float u;
srand((unsigned)time(NULL));
for(i = 0;i< 10000 ; i++)
{
u = ((4-1)*((float)rand()/RAND_MAX))+1;
printf("The random value for iteration = %d is %2.4f \n", i, u);
}
}
It successfully generates floating point random numbers between 1 and 4 on an x86 Red Hat Linux machine. But the same program produces 0.0000 as random number on a PPC running Montavista Linux.
Could someone explain why and how to make this work on the PPC Montavista ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
直觉是您应该使用 double 而不是 float 或打印
(double)u
,因为%f
采用 double。我的印象是,当传递给可变参数函数时,浮点数会自动提升为双精度。您也可以尝试打印
(int)(u*10000)
。A hunch is that you should be using double instead of float or printing
(double)u
, since%f
takes a double. I was under the impression that floats were automatically promoted to double when passed to a vararg function though.You could also try printing
(int)(u*10000)
.