|
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