|
3 | 3 | module stdlib_linalg_lapack_aux
|
4 | 4 | use stdlib_linalg_constants
|
5 | 5 | use stdlib_linalg_blas
|
| 6 | + use ieee_arithmetic, only: ieee_support_inf, ieee_support_nan |
6 | 7 | implicit none
|
7 | 8 | private
|
8 | 9 |
|
@@ -111,83 +112,25 @@ module stdlib_linalg_lapack_aux
|
111 | 112 | ! Scalar Arguments
|
112 | 113 | integer(${ik}$), intent(in) :: ispec
|
113 | 114 | real(sp), intent(in) :: one, zero
|
| 115 | + |
114 | 116 | ! =====================================================================
|
115 |
| - ! Local Scalars |
116 |
| - real(sp) :: nan1, nan2, nan3, nan4, nan5, nan6, neginf, negzro, newzro, posinf |
117 |
| - ! Executable Statements |
| 117 | + ! Executable Statements |
118 | 118 | 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 |
156 | 122 | stdlib${ii}$_ieeeck = 0
|
157 | 123 | return
|
158 | 124 | end if
|
| 125 | + |
159 | 126 | ! 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 |
188 | 130 | stdlib${ii}$_ieeeck = 0
|
189 | 131 | return
|
190 | 132 | end if
|
| 133 | + |
191 | 134 | return
|
192 | 135 | end function stdlib${ii}$_ieeeck
|
193 | 136 |
|
|
0 commit comments