|
| 1 | +#:include "common.fypp" |
| 2 | +#:for ck,ct,ci in REAL_KINDS_TYPES |
| 3 | +module stdlib_blas_constants_${ck}$ |
| 4 | + use stdlib_linalg_constants |
| 5 | + implicit none |
| 6 | + |
| 7 | + |
| 8 | + real(${ck}$), parameter :: negone = -1.00_${ck}$ |
| 9 | + real(${ck}$), parameter :: zero = 0.00_${ck}$ |
| 10 | + real(${ck}$), parameter :: half = 0.50_${ck}$ |
| 11 | + real(${ck}$), parameter :: one = 1.00_${ck}$ |
| 12 | + real(${ck}$), parameter :: two = 2.00_${ck}$ |
| 13 | + real(${ck}$), parameter :: three = 3.00_${ck}$ |
| 14 | + real(${ck}$), parameter :: four = 4.00_${ck}$ |
| 15 | + real(${ck}$), parameter :: eight = 8.00_${ck}$ |
| 16 | + real(${ck}$), parameter :: ten = 10.00_${ck}$ |
| 17 | + |
| 18 | + complex(${ck}$), parameter :: czero = ( 0.0_${ck}$,0.0_${ck}$) |
| 19 | + complex(${ck}$), parameter :: chalf = ( 0.5_${ck}$,0.0_${ck}$) |
| 20 | + complex(${ck}$), parameter :: cone = ( 1.0_${ck}$,0.0_${ck}$) |
| 21 | + complex(${ck}$), parameter :: cnegone = (-1.0_${ck}$,0.0_${ck}$) |
| 22 | + |
| 23 | + ! scaling constants |
| 24 | + integer, parameter :: maxexp = maxexponent(zero) |
| 25 | + integer, parameter :: minexp = minexponent(zero) |
| 26 | + |
| 27 | + real(${ck}$), parameter :: rradix = real(radix(zero),${ck}$) |
| 28 | + real(${ck}$), parameter :: ulp = epsilon(zero) |
| 29 | + real(${ck}$), parameter :: eps = ulp*half |
| 30 | + real(${ck}$), parameter :: safmin = rradix**max(minexp-1,1-maxexp) |
| 31 | + real(${ck}$), parameter :: safmax = one/safmin |
| 32 | + real(${ck}$), parameter :: smlnum = safmin/ulp |
| 33 | + real(${ck}$), parameter :: bignum = safmax*ulp |
| 34 | + real(${ck}$), parameter :: rtmin = sqrt(smlnum) |
| 35 | + real(${ck}$), parameter :: rtmax = sqrt(bignum) |
| 36 | + |
| 37 | + ! Blue's scaling constants |
| 38 | + ! ssml>=1/s and sbig==1/S with s,S as defined in https://doi.org/10.1145/355769.355771 |
| 39 | + real(${ck}$), parameter :: tsml = rradix**ceiling((minexp-1)*half) |
| 40 | + real(${ck}$), parameter :: tbig = rradix**floor((maxexp-digits(zero)+1)*half) |
| 41 | + real(${ck}$), parameter :: ssml = rradix**(-floor((minexp-digits(zero))*half)) |
| 42 | + real(${ck}$), parameter :: sbig = rradix**(-ceiling((maxexp+digits(zero)-1)*half)) |
| 43 | + |
| 44 | +end module |
| 45 | + |
| 46 | +#:endfor |
0 commit comments