li913 发表于 2017-4-4 09:27:09

如果使用rand,cvf 请 use dfport

希萊雅桑 发表于 2017-4-4 13:27:12

Villain 发表于 2017-4-4 09:12
看了看你的代码,貌似你是在用随机函数。debug了一下,程序报错的位置确实是rand所在的行。
就我所知,fo ...

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

希萊雅桑 发表于 2017-4-4 13:40:58

Villain 发表于 2017-4-4 09:12
看了看你的代码,貌似你是在用随机函数。debug了一下,程序报错的位置确实是rand所在的行。
就我所知,fo ...

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

Villain 发表于 2017-4-4 15:09:58

希萊雅桑 发表于 2017-4-4 13:40
我想要取整數的亂數耶 您的取法好像是介於零跟一之間的數

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

Villain 发表于 2017-4-4 15:34:03

希萊雅桑 发表于 2017-4-4 13:27
rand不是亂數的簡寫麼? 寫完整會比較好 我試試看

我用的是Microsoft Visual Studio的fortran编译器。这里面生成随机数的方式就是用call random_numbe(x)的方式来生成一个0到1之间的随机实数的。如下可以生成1到4之间的随机整数:
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

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

希萊雅桑 发表于 2017-4-4 22:14:47

Villain 发表于 2017-4-4 15:34
我用的是Microsoft Visual Studio的fortran编译器。这里面生成随机数的方式就是用call random_numbe(x)的 ...

謝謝 解決了
页: 1 [2]
查看完整版本: 關於超出邊界的問題