| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1867 人关注过本帖
标题:求助一个关于随机数的问题 谢谢!
只看楼主 加入收藏
脑壳疼
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2018-4-22
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
求助一个关于随机数的问题 谢谢!
如何随机 -2.3 到 3.4 内的小数
 谢谢各位
【最好是有通用公式】
搜索更多相关主题的帖子: 随机数 随机 小数 通用 公式 
2018-04-24 05:47
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:4 
先产生0-1之间的小数x,然后x=-2.3+x*(3.4-(-2.3))--先上课(逃)~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2018-04-24 08:04
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:12 
-2.3 到 3.4 之间有无穷多的数,比如 -2.30000000000000000000000000000000000000000000000000000000000000000000000000000001

所以你想要的是 -2.3 -2.2 -2.1 …… +3.4 这种间隔为0.1的随机数,
还是 -2.3到+3.4之间间隔尽可能小的随机数?
这两种需求是完全一样的。

程序代码:
#include <stdio.h>
#include <stdlib.h>

inline double foo( void )
{
    const int a=-23, b=+34;
    int r = a + int( (b-a+1)/(1.0+RAND_MAX) * rand() );
    return r/10.0;
}

int main( void )
{
    unsigned buf[58] = { 0 };
    for( int i=0; i<10000; ++i )
    {
        double v = foo()*10;
        int y = int(v>0?v+0.5:v-0.5);
        ++buf[ y - -23 ];
    }
    for( int i=0; i!=58; ++i )
        printf( "%+.1f %u\n", (i-23)/10.0, buf[i] );
}
输出
-2.3 177
-2.2 163
-2.1 174
-2.0 185
-1.9 166
-1.8 157
-1.7 170
-1.6 154
-1.5 189
-1.4 166
-1.3 180
-1.2 186
-1.1 159
-1.0 167
-0.9 173
-0.8 176
-0.7 156
-0.6 146
-0.5 173
-0.4 172
-0.3 157
-0.2 181
-0.1 170
+0.0 171
+0.1 174
+0.2 161
+0.3 176
+0.4 170
+0.5 172
+0.6 157
+0.7 163
+0.8 182
+0.9 172
+1.0 184
+1.1 172
+1.2 190
+1.3 186
+1.4 198
+1.5 184
+1.6 158
+1.7 159
+1.8 168
+1.9 182
+2.0 176
+2.1 173
+2.2 174
+2.3 166
+2.4 188
+2.5 176
+2.6 177
+2.7 186
+2.8 162
+2.9 166
+3.0 188
+3.1 180
+3.2 170
+3.3 164
+3.4 178

程序代码:
#include <stdio.h>
#include <stdlib.h>

inline double foo( void )
{
    const double a=-2.3, b=+3.4;
    return a + (b-a)/RAND_MAX * rand();
}

int main( void )
{
    unsigned buf[58] = { 0 };
    for( int i=0; i<10000; ++i )
    {
        double v = foo()*10 - -23;
        int y = (int)v;
        ++buf[y];
    }
    for( int i=0; i!=58; ++i )
        printf( "[%+.1f,%+.1f) %u\n", (i-23)/10.0, (i+1-23)/10.0, buf[i] );
}
输出
[-2.3,-2.2) 180
[-2.2,-2.1) 167
[-2.1,-2.0) 180
[-2.0,-1.9) 183
[-1.9,-1.8) 166
[-1.8,-1.7) 164
[-1.7,-1.6) 170
[-1.6,-1.5) 157
[-1.5,-1.4) 193
[-1.4,-1.3) 175
[-1.3,-1.2) 172
[-1.2,-1.1) 201
[-1.1,-1.0) 153
[-1.0,-0.9) 169
[-0.9,-0.8) 181
[-0.8,-0.7) 174
[-0.7,-0.6) 146
[-0.6,-0.5) 165
[-0.5,-0.4) 185
[-0.4,-0.3) 168
[-0.3,-0.2) 161
[-0.2,-0.1) 191
[-0.1,+0.0) 162
[+0.0,+0.1) 176
[+0.1,+0.2) 161
[+0.2,+0.3) 184
[+0.3,+0.4) 176
[+0.4,+0.5) 178
[+0.5,+0.6) 154
[+0.6,+0.7) 177
[+0.7,+0.8) 166
[+0.8,+0.9) 182
[+0.9,+1.0) 183
[+1.0,+1.1) 168
[+1.1,+1.2) 197
[+1.2,+1.3) 200
[+1.3,+1.4) 186
[+1.4,+1.5) 190
[+1.5,+1.6) 175
[+1.6,+1.7) 168
[+1.7,+1.8) 164
[+1.8,+1.9) 178
[+1.9,+2.0) 185
[+2.0,+2.1) 166
[+2.1,+2.2) 196
[+2.2,+2.3) 166
[+2.3,+2.4) 179
[+2.4,+2.5) 176
[+2.5,+2.6) 186
[+2.6,+2.7) 190
[+2.7,+2.8) 167
[+2.8,+2.9) 167
[+2.9,+3.0) 187
[+3.0,+3.1) 187
[+3.1,+3.2) 169
[+3.2,+3.3) 171
[+3.3,+3.4) 182
[+3.4,+3.5) 0


2018-04-24 09:29
童生
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:205
专家分:455
注 册:2018-3-7
收藏
得分:4 
简单处理 先产生一个不大于  5.7  随机数(0~5.7)再加上-2.3
2018-04-24 11:13
脑壳疼
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2018-4-22
收藏
得分:0 
回复 2楼 九转星河
谢谢比心~
2018-04-24 16:54
脑壳疼
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2018-4-22
收藏
得分:0 
回复 3楼 rjsp
谢谢比心~ ٩(๑>◡<๑)۶
2018-04-24 16:55
脑壳疼
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2018-4-22
收藏
得分:0 
回复 4楼 童生
谢谢 ~

2018-04-24 16:55
快速回复:求助一个关于随机数的问题 谢谢!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017139 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved