Skip to content

Commit ce557e5

Browse files
committed
standardize stdlib_ieeeck
1 parent 036b091 commit ce557e5

File tree

1 file changed

+11
-68
lines changed

1 file changed

+11
-68
lines changed

src/lapack/stdlib_linalg_lapack_aux.fypp

+11-68
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
module stdlib_linalg_lapack_aux
44
use stdlib_linalg_constants
55
use stdlib_linalg_blas
6+
use ieee_arithmetic, only: ieee_support_inf, ieee_support_nan
67
implicit none
78
private
89

@@ -111,83 +112,25 @@ module stdlib_linalg_lapack_aux
111112
! Scalar Arguments
112113
integer(${ik}$), intent(in) :: ispec
113114
real(sp), intent(in) :: one, zero
115+
114116
! =====================================================================
115-
! Local Scalars
116-
real(sp) :: nan1, nan2, nan3, nan4, nan5, nan6, neginf, negzro, newzro, posinf
117-
! Executable Statements
117+
! Executable Statements
118118
stdlib${ii}$_ieeeck = 1
119-
posinf = one / zero
120-
if( posinf<=one ) then
121-
stdlib${ii}$_ieeeck = 0
122-
return
123-
end if
124-
neginf = -one / zero
125-
if( neginf>=zero ) then
126-
stdlib${ii}$_ieeeck = 0
127-
return
128-
end if
129-
negzro = one / ( neginf+one )
130-
if( negzro/=zero ) then
131-
stdlib${ii}$_ieeeck = 0
132-
return
133-
end if
134-
neginf = one / negzro
135-
if( neginf>=zero ) then
136-
stdlib${ii}$_ieeeck = 0
137-
return
138-
end if
139-
newzro = negzro + zero
140-
if( newzro/=zero ) then
141-
stdlib${ii}$_ieeeck = 0
142-
return
143-
end if
144-
posinf = one / newzro
145-
if( posinf<=one ) then
146-
stdlib${ii}$_ieeeck = 0
147-
return
148-
end if
149-
neginf = neginf*posinf
150-
if( neginf>=zero ) then
151-
stdlib${ii}$_ieeeck = 0
152-
return
153-
end if
154-
posinf = posinf*posinf
155-
if( posinf<=one ) then
119+
120+
! Test support for infinity values
121+
if (.not.ieee_support_inf(one)) then
156122
stdlib${ii}$_ieeeck = 0
157123
return
158124
end if
125+
159126
! return if we were only asked to check infinity arithmetic
160-
if( ispec==0 )return
161-
nan1 = posinf + neginf
162-
nan2 = posinf / neginf
163-
nan3 = posinf / posinf
164-
nan4 = posinf*zero
165-
nan5 = neginf*negzro
166-
nan6 = nan5*zero
167-
if( nan1==nan1 ) then
168-
stdlib${ii}$_ieeeck = 0
169-
return
170-
end if
171-
if( nan2==nan2 ) then
172-
stdlib${ii}$_ieeeck = 0
173-
return
174-
end if
175-
if( nan3==nan3 ) then
176-
stdlib${ii}$_ieeeck = 0
177-
return
178-
end if
179-
if( nan4==nan4 ) then
180-
stdlib${ii}$_ieeeck = 0
181-
return
182-
end if
183-
if( nan5==nan5 ) then
184-
stdlib${ii}$_ieeeck = 0
185-
return
186-
end if
187-
if( nan6==nan6 ) then
127+
if (ispec == 0) return
128+
129+
if (.not.ieee_support_nan(one)) then
188130
stdlib${ii}$_ieeeck = 0
189131
return
190132
end if
133+
191134
return
192135
end function stdlib${ii}$_ieeeck
193136

0 commit comments

Comments
 (0)