@@ -8,7 +8,7 @@ module stdlib_math
88 public :: clip, gcd, linspace, logspace
99 public :: EULERS_NUMBER_SP, EULERS_NUMBER_DP
1010 public :: DEFAULT_LINSPACE_LENGTH, DEFAULT_LOGSPACE_BASE, DEFAULT_LOGSPACE_LENGTH
11- public :: arange
11+ public :: arange, is_close, all_close
1212
1313 integer , parameter :: DEFAULT_LINSPACE_LENGTH = 100
1414 integer , parameter :: DEFAULT_LOGSPACE_LENGTH = 50
@@ -454,6 +454,120 @@ pure module function arange_i_int64(start, end, step) result(result)
454454 end function arange_i_int64
455455 end interface arange
456456
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+
457571contains
458572
459573 elemental function clip_int8 (x , xmin , xmax ) result(res)
0 commit comments