@@ -8,7 +8,7 @@ module stdlib_math
8
8
public :: clip, gcd, linspace, logspace
9
9
public :: EULERS_NUMBER_SP, EULERS_NUMBER_DP
10
10
public :: DEFAULT_LINSPACE_LENGTH, DEFAULT_LOGSPACE_BASE, DEFAULT_LOGSPACE_LENGTH
11
- public :: arange
11
+ public :: arange, is_close, all_close
12
12
13
13
integer , parameter :: DEFAULT_LINSPACE_LENGTH = 100
14
14
integer , parameter :: DEFAULT_LOGSPACE_LENGTH = 50
@@ -454,6 +454,120 @@ pure module function arange_i_int64(start, end, step) result(result)
454
454
end function arange_i_int64
455
455
end interface arange
456
456
457
+ ! > Version: experimental
458
+ ! >
459
+ ! > Returns a boolean scalar/array where two scalar/arrays are element-wise equal within a tolerance.
460
+ ! > ([Specification](../page/specs/stdlib_math.html#is_close))
461
+ interface is_close
462
+ elemental module logical function is_close_rsp(a, b, rel_tol, abs_tol, equal_nan) result(close )
463
+ real (sp), intent (in ) :: a, b
464
+ real (sp), intent (in ), optional :: rel_tol, abs_tol
465
+ logical , intent (in ), optional :: equal_nan
466
+ end function is_close_rsp
467
+ elemental module logical function is_close_rdp(a, b, rel_tol, abs_tol, equal_nan) result(close )
468
+ real (dp), intent (in ) :: a, b
469
+ real (dp), intent (in ), optional :: rel_tol, abs_tol
470
+ logical , intent (in ), optional :: equal_nan
471
+ end function is_close_rdp
472
+ elemental module logical function is_close_csp(a, b, rel_tol, abs_tol, equal_nan) result(close )
473
+ complex (sp), intent (in ) :: a, b
474
+ real (sp), intent (in ), optional :: rel_tol, abs_tol
475
+ logical , intent (in ), optional :: equal_nan
476
+ end function is_close_csp
477
+ elemental module logical function is_close_cdp(a, b, rel_tol, abs_tol, equal_nan) result(close )
478
+ complex (dp), intent (in ) :: a, b
479
+ real (dp), intent (in ), optional :: rel_tol, abs_tol
480
+ logical , intent (in ), optional :: equal_nan
481
+ end function is_close_cdp
482
+ end interface is_close
483
+
484
+ ! > Version: experimental
485
+ ! >
486
+ ! > Returns a boolean scalar where two arrays are element-wise equal within a tolerance.
487
+ ! > ([Specification](../page/specs/stdlib_math.html#all_close))
488
+ interface all_close
489
+ logical pure module function all_close_1_rsp(a, b, rel_tol, abs_tol, equal_nan) result(close )
490
+ real (sp), intent (in ) :: a(:), b(:)
491
+ real (sp), intent (in ), optional :: rel_tol, abs_tol
492
+ logical , intent (in ), optional :: equal_nan
493
+ end function all_close_1_rsp
494
+ logical pure module function all_close_2_rsp(a, b, rel_tol, abs_tol, equal_nan) result(close )
495
+ real (sp), intent (in ) :: a(:,:), b(:,:)
496
+ real (sp), intent (in ), optional :: rel_tol, abs_tol
497
+ logical , intent (in ), optional :: equal_nan
498
+ end function all_close_2_rsp
499
+ logical pure module function all_close_3_rsp(a, b, rel_tol, abs_tol, equal_nan) result(close )
500
+ real (sp), intent (in ) :: a(:,:,:), b(:,:,:)
501
+ real (sp), intent (in ), optional :: rel_tol, abs_tol
502
+ logical , intent (in ), optional :: equal_nan
503
+ end function all_close_3_rsp
504
+ logical pure module function all_close_4_rsp(a, b, rel_tol, abs_tol, equal_nan) result(close )
505
+ real (sp), intent (in ) :: a(:,:,:,:), b(:,:,:,:)
506
+ real (sp), intent (in ), optional :: rel_tol, abs_tol
507
+ logical , intent (in ), optional :: equal_nan
508
+ end function all_close_4_rsp
509
+ logical pure module function all_close_1_rdp(a, b, rel_tol, abs_tol, equal_nan) result(close )
510
+ real (dp), intent (in ) :: a(:), b(:)
511
+ real (dp), intent (in ), optional :: rel_tol, abs_tol
512
+ logical , intent (in ), optional :: equal_nan
513
+ end function all_close_1_rdp
514
+ logical pure module function all_close_2_rdp(a, b, rel_tol, abs_tol, equal_nan) result(close )
515
+ real (dp), intent (in ) :: a(:,:), b(:,:)
516
+ real (dp), intent (in ), optional :: rel_tol, abs_tol
517
+ logical , intent (in ), optional :: equal_nan
518
+ end function all_close_2_rdp
519
+ logical pure module function all_close_3_rdp(a, b, rel_tol, abs_tol, equal_nan) result(close )
520
+ real (dp), intent (in ) :: a(:,:,:), b(:,:,:)
521
+ real (dp), intent (in ), optional :: rel_tol, abs_tol
522
+ logical , intent (in ), optional :: equal_nan
523
+ end function all_close_3_rdp
524
+ logical pure module function all_close_4_rdp(a, b, rel_tol, abs_tol, equal_nan) result(close )
525
+ real (dp), intent (in ) :: a(:,:,:,:), b(:,:,:,:)
526
+ real (dp), intent (in ), optional :: rel_tol, abs_tol
527
+ logical , intent (in ), optional :: equal_nan
528
+ end function all_close_4_rdp
529
+ logical pure module function all_close_1_csp(a, b, rel_tol, abs_tol, equal_nan) result(close )
530
+ complex (sp), intent (in ) :: a(:), b(:)
531
+ real (sp), intent (in ), optional :: rel_tol, abs_tol
532
+ logical , intent (in ), optional :: equal_nan
533
+ end function all_close_1_csp
534
+ logical pure module function all_close_2_csp(a, b, rel_tol, abs_tol, equal_nan) result(close )
535
+ complex (sp), intent (in ) :: a(:,:), b(:,:)
536
+ real (sp), intent (in ), optional :: rel_tol, abs_tol
537
+ logical , intent (in ), optional :: equal_nan
538
+ end function all_close_2_csp
539
+ logical pure module function all_close_3_csp(a, b, rel_tol, abs_tol, equal_nan) result(close )
540
+ complex (sp), intent (in ) :: a(:,:,:), b(:,:,:)
541
+ real (sp), intent (in ), optional :: rel_tol, abs_tol
542
+ logical , intent (in ), optional :: equal_nan
543
+ end function all_close_3_csp
544
+ logical pure module function all_close_4_csp(a, b, rel_tol, abs_tol, equal_nan) result(close )
545
+ complex (sp), intent (in ) :: a(:,:,:,:), b(:,:,:,:)
546
+ real (sp), intent (in ), optional :: rel_tol, abs_tol
547
+ logical , intent (in ), optional :: equal_nan
548
+ end function all_close_4_csp
549
+ logical pure module function all_close_1_cdp(a, b, rel_tol, abs_tol, equal_nan) result(close )
550
+ complex (dp), intent (in ) :: a(:), b(:)
551
+ real (dp), intent (in ), optional :: rel_tol, abs_tol
552
+ logical , intent (in ), optional :: equal_nan
553
+ end function all_close_1_cdp
554
+ logical pure module function all_close_2_cdp(a, b, rel_tol, abs_tol, equal_nan) result(close )
555
+ complex (dp), intent (in ) :: a(:,:), b(:,:)
556
+ real (dp), intent (in ), optional :: rel_tol, abs_tol
557
+ logical , intent (in ), optional :: equal_nan
558
+ end function all_close_2_cdp
559
+ logical pure module function all_close_3_cdp(a, b, rel_tol, abs_tol, equal_nan) result(close )
560
+ complex (dp), intent (in ) :: a(:,:,:), b(:,:,:)
561
+ real (dp), intent (in ), optional :: rel_tol, abs_tol
562
+ logical , intent (in ), optional :: equal_nan
563
+ end function all_close_3_cdp
564
+ logical pure module function all_close_4_cdp(a, b, rel_tol, abs_tol, equal_nan) result(close )
565
+ complex (dp), intent (in ) :: a(:,:,:,:), b(:,:,:,:)
566
+ real (dp), intent (in ), optional :: rel_tol, abs_tol
567
+ logical , intent (in ), optional :: equal_nan
568
+ end function all_close_4_cdp
569
+ end interface all_close
570
+
457
571
contains
458
572
459
573
elemental function clip_int8 (x , xmin , xmax ) result(res)
0 commit comments