Fortran Coder

楼主: 希萊雅桑
打印 上一主题 下一主题

[数值问题] 關於超出邊界的問題

[复制链接]

796

帖子

2

主题

0

精华

大宗师

F 币
3787 元
贡献
2266 点
11#
发表于 2017-4-4 09:27:09 | 只看该作者
如果使用rand,cvf 请 use dfport

10

帖子

1

主题

0

精华

入门

F 币
50 元
贡献
30 点
12#
 楼主| 发表于 2017-4-4 13:27:12 | 只看该作者
Villain 发表于 2017-4-4 09:12
看了看你的代码,貌似你是在用随机函数。debug了一下,程序报错的位置确实是rand所在的行。
就我所知,fo ...

rand不是亂數的簡寫麼? 寫完整會比較好 我試試看

10

帖子

1

主题

0

精华

入门

F 币
50 元
贡献
30 点
13#
 楼主| 发表于 2017-4-4 13:40:58 | 只看该作者
Villain 发表于 2017-4-4 09:12
看了看你的代码,貌似你是在用随机函数。debug了一下,程序报错的位置确实是rand所在的行。
就我所知,fo ...

我想要取整數的亂數耶 您的取法好像是介於零跟一之間的數

60

帖子

17

主题

0

精华

专家

F 币
454 元
贡献
266 点
14#
发表于 2017-4-4 15:09:58 | 只看该作者
希萊雅桑 发表于 2017-4-4 13:40
我想要取整數的亂數耶 您的取法好像是介於零跟一之間的數

随机函数只能生成0到1之间的数。
一般情况下,如果要生成0到N之间的随机整数,那么用生成的0到1之间的随机数x乘以N然后取整就好。取值域为正整数的话,那么用1/x函数取整就好了,不过这样非常不安全,会溢出。

60

帖子

17

主题

0

精华

专家

F 币
454 元
贡献
266 点
15#
发表于 2017-4-4 15:34:03 | 只看该作者
希萊雅桑 发表于 2017-4-4 13:27
rand不是亂數的簡寫麼? 寫完整會比較好 我試試看

我用的是Microsoft Visual Studio的fortran编译器。这里面生成随机数的方式就是用call random_numbe(x)的方式来生成一个0到1之间的随机实数的。如下可以生成1到4之间的随机整数:
[Fortran] 纯文本查看 复制代码
program fc
    implicit none
    integer::I,J,k
    real(kind=8)::x
    i=0
    do
      if(I.gt.1000)exit 
      call random_seed()
      call random_number(x)
      k=1+anint(3*x)
      write(*,*)k      
      I=I+1
    enddo
    
    pause
end 


至于这种方法在你所用的编译器上是否能用就不知道了。
我曾经用这个随机函数来算圆周率,算了一天左右,也只算到小数点后的第八位,由此看来,生成的伪随机数分布还是差强人意。

10

帖子

1

主题

0

精华

入门

F 币
50 元
贡献
30 点
16#
 楼主| 发表于 2017-4-4 22:14:47 | 只看该作者
Villain 发表于 2017-4-4 15:34
我用的是Microsoft Visual Studio的fortran编译器。这里面生成随机数的方式就是用call random_numbe(x)的 ...

謝謝 解決了
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-4-20 12:59

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表