Skip to content

Commit a4330cc

Browse files
author
Jim-215-Fisher
committed
slightly changed format and some minor corrections
1 parent 939fd1a commit a4330cc

File tree

1 file changed

+75
-15
lines changed

1 file changed

+75
-15
lines changed

src/stdlib_stats_distribution_uniform.fypp

Lines changed: 75 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ module stdlib_stats_distribution_uniform
1717
public :: uniform_distribution_cdf
1818
public :: shuffle
1919

20+
2021
interface uniform_distribution_rvs
2122
!! Version experimental
2223
!!
@@ -39,10 +40,12 @@ module stdlib_stats_distribution_uniform
3940
#:endfor
4041
end interface uniform_distribution_rvs
4142

43+
4244
interface uniform_distribution_pdf
4345
!! Version experiment
4446
!!
45-
!! Get uniform distribution probability density (pdf) for integer, real and complex variables
47+
!! Get uniform distribution probability density (pdf) for integer, real and
48+
!! complex variables.
4649
!! ([Specification](../page/specs/stdlib_stats_distribution_uniform.html#
4750
!! description))
4851

@@ -51,10 +54,12 @@ module stdlib_stats_distribution_uniform
5154
#:endfor
5255
end interface uniform_distribution_pdf
5356

57+
5458
interface uniform_distribution_cdf
5559
!! Version experimental
5660
!!
57-
!! Get uniform distribution cumulative distribution function (cdf) for integer, real and complex variables
61+
!! Get uniform distribution cumulative distribution function (cdf) for integer,
62+
!! real and complex variables.
5863
!! ([Specification](../page/specs/stdlib_stats_distribution_uniform.html#
5964
!! description))
6065
!!
@@ -63,10 +68,12 @@ module stdlib_stats_distribution_uniform
6368
#:endfor
6469
end interface uniform_distribution_cdf
6570

71+
6672
interface shuffle
6773
!! Version experimental
6874
!!
69-
!! Fisher-Yates shuffle algorithm for a rank one array of integer, real and complex variables
75+
!! Fisher-Yates shuffle algorithm for a rank one array of integer, real and
76+
!! complex variables
7077
!! ([Specification](../page/specs/stdlib_stats_distribution_uniform.html#
7178
!! description))
7279
!!
@@ -76,20 +83,25 @@ module stdlib_stats_distribution_uniform
7683
end interface shuffle
7784

7885

79-
contains
86+
87+
88+
contains
89+
8090

8191
#:for k1, t1 in INT_KINDS_TYPES
8292
impure elemental function unif_dist_rvs_1_${t1[0]}$${k1}$(scale) result(res)
93+
!
8394
! Uniformly distributed integer in [0, scale]
8495
! Bitmask with rejection
8596
! https://www.pcg-random.org/posts/bounded-rands.html
8697
!
8798
! Fortran 90 translated from c by Jim-215-fisher
99+
!
88100
${t1}$, intent(in) :: scale
89101
${t1}$ :: res, u, mask
90102
integer :: zeros, bits_left, bits
91103

92-
if(scale <= 0_${k1}$) call error_stop("Error(unif_dist_rvs_1): Uniform" &
104+
if(scale <= 0_${k1}$) call error_stop("Error(unif_dist_rvs_1): Uniform" &
93105
//" distribution scale parameter must be positive")
94106
zeros = leadz(scale)
95107
bits = bit_size(scale) - zeros
@@ -111,9 +123,12 @@ module stdlib_stats_distribution_uniform
111123

112124
#:endfor
113125

126+
127+
114128
#:for k1, t1 in INT_KINDS_TYPES
115129
impure elemental function unif_dist_rvs_${t1[0]}$${k1}$(loc, scale) &
116-
result( res )
130+
result( res )
131+
!
117132
! Uniformly distributed integer in [loc, loc + scale]
118133
!
119134
${t1}$, intent(in) :: loc, scale
@@ -126,8 +141,11 @@ module stdlib_stats_distribution_uniform
126141

127142
#:endfor
128143

144+
145+
129146
#:for k1, t1 in REAL_KINDS_TYPES
130147
impure elemental function unif_dist_rvs_0_${t1[0]}$${k1}$( ) result(res)
148+
!
131149
! Uniformly distributed float in [0,1]
132150
! Based on the paper by Frederic Goualard, "Generating Random Floating-
133151
! Point Numbers By Dividing Integers: a Case Study", Proceedings of
@@ -142,8 +160,11 @@ module stdlib_stats_distribution_uniform
142160

143161
#:endfor
144162

163+
164+
145165
#:for k1, t1 in REAL_KINDS_TYPES
146166
impure elemental function unif_dist_rvs_1_${t1[0]}$${k1}$(scale) result(res)
167+
!
147168
! Uniformly distributed float in [0, scale]
148169
!
149170
${t1}$, intent(in) :: scale
@@ -156,9 +177,12 @@ module stdlib_stats_distribution_uniform
156177

157178
#:endfor
158179

180+
181+
159182
#:for k1, t1 in REAL_KINDS_TYPES
160183
impure elemental function unif_dist_rvs_${t1[0]}$${k1}$(loc, scale) &
161-
result(res)
184+
result(res)
185+
!
162186
! Uniformly distributed float in [loc, loc + scale]
163187
!
164188
${t1}$, intent(in) :: loc, scale
@@ -171,11 +195,14 @@ module stdlib_stats_distribution_uniform
171195

172196
#:endfor
173197

198+
199+
174200
#:for k1, t1 in CMPLX_KINDS_TYPES
175201
impure elemental function unif_dist_rvs_1_${t1[0]}$${k1}$(scale) result(res)
176-
! Uniformly distributed complex in [(0,0i), (scale, i(scale)]
202+
!
203+
! Uniformly distributed complex in [(0,0i), (scale, i(scale))]
177204
! The real part and imaginary part are independent of each other, so that
178-
! the joint distribution is on an unit square [(0,0i), scale,i(scale)]
205+
! the joint distribution is on an unit square [(0,0i), (scale,i(scale))]
179206
!
180207
${t1}$, intent(in) :: scale
181208
${t1}$ :: res
@@ -191,7 +218,7 @@ module stdlib_stats_distribution_uniform
191218
tr = scale % re * r1
192219
ti = 0.0_${k1}$
193220
else
194-
tr = scale % re * r1
221+
tr = scale % re * r1
195222
r1 = unif_dist_rvs_0_r${k1}$( )
196223
ti = scale % im * r1
197224
endif
@@ -200,9 +227,12 @@ module stdlib_stats_distribution_uniform
200227

201228
#:endfor
202229

230+
231+
203232
#:for k1, t1 in CMPLX_KINDS_TYPES
204233
impure elemental function unif_dist_rvs_${t1[0]}$${k1}$(loc, scale) &
205-
result(res)
234+
result(res)
235+
!
206236
! Uniformly distributed complex in [(loc,iloc), (loc + scale, i(loc + scale))]
207237
! The real part and imaginary part are independent of each other, so that
208238
! the joint distribution is on an unit square [(loc,iloc), (loc + scale,
@@ -231,9 +261,12 @@ module stdlib_stats_distribution_uniform
231261

232262
#:endfor
233263

264+
265+
234266
#:for k1, t1 in INT_KINDS_TYPES
235267
function unif_dist_rvs_array_${t1[0]}$${k1}$(loc, scale, array_size) &
236-
result(res)
268+
result(res)
269+
237270
integer, intent(in) :: array_size
238271
${t1}$, intent(in) :: loc, scale
239272
${t1}$ :: res(array_size)
@@ -265,9 +298,12 @@ module stdlib_stats_distribution_uniform
265298

266299
#:endfor
267300

301+
302+
268303
#:for k1, t1 in REAL_KINDS_TYPES
269304
function unif_dist_rvs_array_${t1[0]}$${k1}$(loc, scale, array_size) &
270-
result(res)
305+
result(res)
306+
271307
integer, intent(in) :: array_size
272308
${t1}$, intent(in) :: loc, scale
273309
${t1}$ :: res(array_size)
@@ -287,9 +323,12 @@ module stdlib_stats_distribution_uniform
287323

288324
#:endfor
289325

326+
327+
290328
#:for k1, t1 in CMPLX_KINDS_TYPES
291329
function unif_dist_rvs_array_${t1[0]}$${k1}$(loc, scale, array_size) &
292-
result(res)
330+
result(res)
331+
293332
integer, intent(in) :: array_size
294333
${t1}$, intent(in) :: loc, scale
295334
${t1}$ :: res(array_size)
@@ -321,8 +360,11 @@ module stdlib_stats_distribution_uniform
321360

322361
#:endfor
323362

363+
364+
324365
#:for k1, t1 in INT_KINDS_TYPES
325366
elemental function unif_dist_pdf_${t1[0]}$${k1}$(x, loc, scale) result(res)
367+
326368
${t1}$, intent(in) :: x, loc, scale
327369
real :: res
328370

@@ -337,8 +379,11 @@ module stdlib_stats_distribution_uniform
337379

338380
#:endfor
339381

382+
383+
340384
#:for k1, t1 in REAL_KINDS_TYPES
341385
elemental function unif_dist_pdf_${t1[0]}$${k1}$(x, loc, scale) result(res)
386+
342387
${t1}$, intent(in) :: x, loc, scale
343388
real :: res
344389

@@ -353,8 +398,11 @@ module stdlib_stats_distribution_uniform
353398

354399
#:endfor
355400

401+
402+
356403
#:for k1, t1 in CMPLX_KINDS_TYPES
357404
elemental function unif_dist_pdf_${t1[0]}$${k1}$(x, loc, scale) result(res)
405+
358406
${t1}$, intent(in) :: x, loc, scale
359407
real :: res
360408
real(${k1}$) :: tr, ti
@@ -372,8 +420,11 @@ module stdlib_stats_distribution_uniform
372420

373421
#:endfor
374422

423+
424+
375425
#:for k1, t1 in INT_KINDS_TYPES
376426
elemental function unif_dist_cdf_${t1[0]}$${k1}$(x, loc, scale) result(res)
427+
377428
${t1}$, intent(in) :: x, loc, scale
378429
real :: res
379430

@@ -390,8 +441,11 @@ module stdlib_stats_distribution_uniform
390441

391442
#:endfor
392443

444+
445+
393446
#:for k1, t1 in REAL_KINDS_TYPES
394447
elemental function unif_dist_cdf_${t1[0]}$${k1}$(x, loc, scale) result(res)
448+
395449
${t1}$, intent(in) :: x, loc, scale
396450
real :: res
397451

@@ -408,8 +462,11 @@ module stdlib_stats_distribution_uniform
408462

409463
#:endfor
410464

465+
466+
411467
#:for k1, t1 in CMPLX_KINDS_TYPES
412468
elemental function unif_dist_cdf_${t1[0]}$${k1}$(x, loc, scale) result(res)
469+
413470
${t1}$, intent(in) :: x, loc, scale
414471
real :: res
415472
logical :: r1, r2, i1, i2
@@ -430,7 +487,7 @@ module stdlib_stats_distribution_uniform
430487
res = (x % im - loc % im) / scale % im
431488
elseif((.not. r1) .and. (.not. r2) .and. (.not. i1) .and. (.not. i2)) &
432489
then
433-
res = (x % re - loc % re) * (x % im - loc % im) / &
490+
res = (x % re - loc % re) * (x % im - loc % im) / &
434491
(scale % re * scale % im)
435492
elseif(r2 .and. i2)then
436493
res = 1.0
@@ -439,8 +496,11 @@ module stdlib_stats_distribution_uniform
439496

440497
#:endfor
441498

499+
500+
442501
#:for k1, t1 in ALL_KINDS_TYPES
443502
function shuffle_${t1[0]}$${k1}$( list ) result(res)
503+
444504
${t1}$, intent(in) :: list(:)
445505
${t1}$ :: res(size(list))
446506
${t1}$ :: tmp

0 commit comments

Comments
 (0)