函数的输出应该是双倍的,但它给了我整数

Posted

技术标签:

【中文标题】函数的输出应该是双倍的,但它给了我整数【英文标题】:The output of the function should be double but it gives me integer 【发布时间】:2015-12-03 07:48:37 【问题描述】:

我做了一个程序,它实际上很好并且可以工作,它有一个用户定义的函数,但只有一个问题,如标题所示,我得到的是整数输出而不是双精度,我不知道为什么我尝试了我所知道的一切,但最终失败了。

为什么函数的结果是整数而不是双精度数?

编写一个函数main(),提示用户输入三个整数数字、小写和大写,然后调用函数average()double average( int howManyNumbers, int lower, int upper) 它生成howManyNumbers 范围内的随机整数,包括上下限。然后该函数查找并返回随机生成的整数的平均值。该函数应为每次运行生成不同的值集。

这是我的程序代码:

#include<iostream>
#include<cstdlib>
#include<ctime>
#include<iomanip>
using namespace std;

int main ()

    int number,lower,upper;
    double average (int , int , int);
    cout<<"Enter number, lower, upper: ";
    cin>>number>>lower>>upper;
    cout<<showpoint<<fixed;
    cout<<"The average of the "<<number<<" random integers is"<<average(number,lower,upper );
    return 0;


double average (int howManyNumbers, int lower, int upper)

    int i;
    double avg,sum=0;
    for (i=0;i<howManyNumbers;i++)
        
            srand(time(0));
            sum=sum+(lower+rand()%(upper-lower+1));
        

    avg=(sum/howManyNumbers);
    return avg;

【问题讨论】:

(lower+rand()%(upper-lower+1)) 所有这些算术只涉及整数。 有时,(double)3.0 会输出为3,但它在内部仍然是double 我真的怀疑 average(100,0,100 ) 给出了一个整数。 avg=(sum/howManyNumbers); 不是整数算法。 avg=(sum/(double)howManyNumbers); 每当您需要浮点结果时,请确保您使用的所有值也是浮点数。带有整数的算术运算符会导致所有内容在被隐式转换回浮点数之前被截断为整数。 @DarkZeros 您可以通过将其乘以 1.0 来使平均值加倍,如下所示:“avg=1.0*(sum/howManyNumbers) 因为“sum/howManyNumbers”给出整数,将其乘以 1.0 为双倍. (我从我的医生那里得到的) 【参考方案1】:

srand(time(0)); 移到循环之前。

使用srand(time(0));,您在每个循环上重新初始化随机数生成器,这会在for 循环的每次迭代中调用rand() 产生相同的结果,从而将相同的数字添加到@ 987654326@howManyNumbers的次数。

因此,当除以 howManyNumbers 时,它会返回一个“整数”整数(或足够接近,以至于在使用的精度下不会显示错误)。

简单;

srand(time(0)); // moved to before the loop.
for (i=0;i<howManyNumbers;i++)

  // ...

Demo

【讨论】:

它工作得很好,谢谢你的信息和解释^^【参考方案2】:

您只需拨打srand(time(0)); 一次,您将获得双倍结果。

 srand(time(0));
 for (i=0;i<howManyNumbers;i++)
 
     sum=sum+(lower+rand()%(upper-lower+1));
 

【讨论】:

非常感谢兄弟,它确实有效,它给了我双重价值。但是你能告诉我当我将 srand(time(0)) 移到循环之外时到底发生了什么吗? 以下链接解释了为什么您应该在整个会话中只初始化一次 srand 以生成不同的数字。 ***.com/questions/5620163/use-of-srand-in-c

以上是关于函数的输出应该是双倍的,但它给了我整数的主要内容,如果未能解决你的问题,请参考以下文章

我正在尝试附加 alamofire 循环并放入 sqlite db,但它给了我错误

好吧,我有一个关于 MySql 中的递归的问题,关于创建递归阶乘函数。它给了我错误1424:

我想在useEffect react Js中使用带有foreach的axios,但它给了我(无法读取属性Symbol(Symbol.iterator)错误?

我正在尝试通过批处理文件打开 Jmeter,但它给了我一个 Windows 错误

Flutter:我正在使用 post api 将文件上传到数据库。但它给了我一个错误

SQL,在日期列中添加时间字段