在 PPC 上的 Montavista 上用 C 语言生成浮点数

发布于 2024-11-02 01:48:23 字数 552 浏览 6 评论 0原文

我有以下简单的程序来生成 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

南汐寒笙箫 2024-11-09 01:48:23

直觉是您应该使用 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).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文