c - 如何计算C中的 float ?

标签 c random

我需要为秒数生成一个随机数,然后用秒数计算这些秒数是多少分钟和几小时。所以,我首先使用 rand() 生成一个数字,但这似乎有点奇怪,每次我运行程序时,随机数(之前的)只增加 3。是的,它是随机的,但每次运行仍然只增加 3 .如果可能的话,我想让它更随机。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
    long sekundi;
    srand(time(NULL));
    sekundi = rand();
    double minuti,casovi;
    casovi = (sekundi / 3600);
    minuti = (sekundi / 60);
    printf("%d \n",sekundi);
    printf("%4.2f \n",casovi);
    printf("%4.2f \n",minuti);

    return 0;
}

那是我的代码,我是 C 语言的新手,请原谅我的格式和所有问题。它似乎没有正确计算小时和分钟,它确实对第一个数字正确,然后在没有正确小数的数字后添加 x,00。

最佳答案

我怀疑,当您使用两个在数值上彼此接近的种子初始化生成器时,生成序列中的第一个数字也可能在数值上接近。然而,人们希望在那之后序列会很快发生分歧。

在我的环境中,丢弃第一个数字似乎有帮助:

long sekundi;
srand(time(NULL));
rand(); // <<<<< THIS
sekundi = rand();

当然,如果您在同一秒内运行代码两次,生成器仍将使用完全相同的值作为种子,并且您两次都将获得完全相同的输出。如果这是一个问题,您可能应该使用更高分辨率的计时器来生成种子。

关于您问题的另一方面,您似乎想使用 float 而不是整数除法:

casovi = (sekundi / 3600.);
minuti = (sekundi / 60.);

(注意在数字文字末尾添加的 .。)

关于c - 如何计算C中的 float ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19407966/

相关文章:

c - 了解指针在嵌入式系统中的使用

c - 变量取一定值时的断点

python - 使用 while 循环重复生成随机数的函数

java - 如何生成一个 n 个随机正整数的序列,这些整数加起来等于某个值?

C:向数组添加元素

c++ - 在 C++ 类中访问 C 风格的回调

r - 如何创建有偏随机数生成器?

python - 如何检查python中变量的分布?

python - 创建随机 0 和 1 列表的优雅方式

Android -- 从 JNI 获取 MEID