C ++舍入随机双精度

系统

我在整理随机双精度数只有一个小数点时遇到一些问题。我已经在线上看了一下,据我所能了解和理解的,我一切都正确。但是显然不是。具体来说,似乎我可能使用了不正确的“ round()”,因为即使我不对其进行所有其他乘法运算(等),它也不会四舍五入。

double u;
srand(unsigned(time(NULL)));

for(int i = 0; i < 10; i++){
    u = (double)rand()/(RAND_MAX+1) + (rand()%101); //Acquire random number, turn it into decimal and then add it to another number between 0-100.
    u *= 10; //Shift numbers left to remove first decimal from round.
    round(u); //Round to nearest whole number.
    u /= 10; //Shift right to return the first decimal.

    cout<<u<<" "<<flush;
}

这种方法对我来说似乎很糟糕。显然,它不会在double的更高范围内起作用(因为* 10可能会使它过载,或者不管它叫什么)。我希望有人:
A.告诉我该代码在哪里出错,或者提示它。
B.建议一种更好,更有效的方法。我确定肯定有一个。
C.让我四舍五入到小数点后一位。

并提前感谢!

运营商

我不知道为什么要std::rand()继续推荐它,因为它的表面上的简单性令人误解,并且我们在过去五年中拥有更好的工具

C ++ 11随机生成器更易于正确使用并且在统计上您会获得更好的结果。如果需要,您还可以选择不同的引擎和发行版。

// Setup
std::default_random_engine generator;
generator.seed(/* truly random seed, e.g. from std::random_device */);
std::uniform_real_distribution<double> distribution(/* your range */);

// Usage
double randomNumber = distribution(generator);
double rounded = std::round(10. * randomNumber) / 10.;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++写入文件中双精度类型的意外舍入

来自分类Dev

C#生成随机双精度数范围

来自分类Dev

双精度乘法C ++

来自分类Dev

C++ 程序自动舍入除数组中的第一个值以外的双精度值

来自分类Dev

正确舍入的双精度除法

来自分类Dev

文件输出期间的C ++双精度精度

来自分类Dev

之间的随机双精度

来自分类Dev

在C ++中添加双精度和复数

来自分类Dev

C ++从流中提取双精度

来自分类Dev

C ++中的双精度整数转换

来自分类Dev

C ++中双精度类型值的减法

来自分类Dev

C#浮点到双精度转换

来自分类Dev

C共享内存双精度向量

来自分类Dev

C ++中的双精度整数转换

来自分类Dev

C中的双精度数字

来自分类Dev

C-获取双精度位数

来自分类Dev

C ++ Winapi LONG到标准双精度

来自分类Dev

C ++双精度为1079574528或0

来自分类Dev

C ++中双精度值的微小变化

来自分类Dev

C ++传递整数,错误说是双精度

来自分类Dev

C:双精度算术中的不精确

来自分类Dev

C ++ cout将双精度对齐为精度为2的双精度

来自分类Dev

C中使用EPSILON比较双精度值的精度

来自分类Dev

如何在C ++中正确设置双精度的精度

来自分类Dev

在C中读取单精度使用双精度变量

来自分类Dev

程序返回单精度双精度值(C ++)

来自分类Dev

如何在C#中始终将双精度或双精度数组转换为双精度数组

来自分类Dev

将数字舍入到Objective-C中的指定精度

来自分类Dev

C#中的双精度比较精度损失,加减法双精度数时会发生精度损失