mirror of
https://github.com/python/cpython.git
synced 2025-12-08 06:10:17 +00:00
gh-116738: Statically initialize special constants in cmath module (gh-142161)
The initialization during `mod_exec` wasn't thread-safe with multiple interpreters.
This commit is contained in:
parent
8392095bf9
commit
2dac9e6016
2 changed files with 101 additions and 126 deletions
|
|
@ -0,0 +1,2 @@
|
|||
Fix :mod:`cmath` data race when initializing trigonometric tables with
|
||||
subinterpreters.
|
||||
|
|
@ -163,8 +163,15 @@ special_type(double d)
|
|||
raised.
|
||||
*/
|
||||
|
||||
static Py_complex acos_special_values[7][7];
|
||||
|
||||
static Py_complex acos_special_values[7][7] = {
|
||||
{ {P34,INF}, {P,INF}, {P,INF}, {P,-INF}, {P,-INF}, {P34,-INF}, {N,INF} },
|
||||
{ {P12,INF}, {U,U}, {U,U}, {U,U}, {U,U}, {P12,-INF}, {N,N} },
|
||||
{ {P12,INF}, {U,U}, {P12,0.}, {P12,-0.}, {U,U}, {P12,-INF}, {P12,N} },
|
||||
{ {P12,INF}, {U,U}, {P12,0.}, {P12,-0.}, {U,U}, {P12,-INF}, {P12,N} },
|
||||
{ {P12,INF}, {U,U}, {U,U}, {U,U}, {U,U}, {P12,-INF}, {N,N} },
|
||||
{ {P14,INF}, {0.,INF}, {0.,INF}, {0.,-INF}, {0.,-INF}, {P14,-INF}, {N,INF} },
|
||||
{ {N,INF}, {N,N}, {N,N}, {N,N}, {N,N}, {N,-INF}, {N,N} }
|
||||
};
|
||||
/*[clinic input]
|
||||
cmath.acos -> Py_complex_protected
|
||||
|
||||
|
|
@ -202,7 +209,15 @@ cmath_acos_impl(PyObject *module, Py_complex z)
|
|||
}
|
||||
|
||||
|
||||
static Py_complex acosh_special_values[7][7];
|
||||
static Py_complex acosh_special_values[7][7] = {
|
||||
{ {INF,-P34}, {INF,-P}, {INF,-P}, {INF,P}, {INF,P}, {INF,P34}, {INF,N} },
|
||||
{ {INF,-P12}, {U,U}, {U,U}, {U,U}, {U,U}, {INF,P12}, {N,N} },
|
||||
{ {INF,-P12}, {U,U}, {0.,-P12}, {0.,P12}, {U,U}, {INF,P12}, {N,P12} },
|
||||
{ {INF,-P12}, {U,U}, {0.,-P12}, {0.,P12}, {U,U}, {INF,P12}, {N,P12} },
|
||||
{ {INF,-P12}, {U,U}, {U,U}, {U,U}, {U,U}, {INF,P12}, {N,N} },
|
||||
{ {INF,-P14}, {INF,-0.}, {INF,-0.}, {INF,0.}, {INF,0.}, {INF,P14}, {INF,N} },
|
||||
{ {INF,N}, {N,N}, {N,N}, {N,N}, {N,N}, {INF,N}, {N,N} }
|
||||
};
|
||||
|
||||
/*[clinic input]
|
||||
cmath.acosh = cmath.acos
|
||||
|
|
@ -257,7 +272,15 @@ cmath_asin_impl(PyObject *module, Py_complex z)
|
|||
}
|
||||
|
||||
|
||||
static Py_complex asinh_special_values[7][7];
|
||||
static Py_complex asinh_special_values[7][7] = {
|
||||
{ {-INF,-P14}, {-INF,-0.}, {-INF,-0.}, {-INF,0.}, {-INF,0.}, {-INF,P14}, {-INF,N} },
|
||||
{ {-INF,-P12}, {U,U}, {U,U}, {U,U}, {U,U}, {-INF,P12}, {N,N} },
|
||||
{ {-INF,-P12}, {U,U}, {-0.,-0.}, {-0.,0.}, {U,U}, {-INF,P12}, {N,N} },
|
||||
{ {INF,-P12}, {U,U}, {0.,-0.}, {0.,0.}, {U,U}, {INF,P12}, {N,N} },
|
||||
{ {INF,-P12}, {U,U}, {U,U}, {U,U}, {U,U}, {INF,P12}, {N,N} },
|
||||
{ {INF,-P14}, {INF,-0.}, {INF,-0.}, {INF,0.}, {INF,0.}, {INF,P14}, {INF,N} },
|
||||
{ {INF,N}, {N,N}, {N,-0.}, {N,0.}, {N,N}, {INF,N}, {N,N} }
|
||||
};
|
||||
|
||||
/*[clinic input]
|
||||
cmath.asinh = cmath.acos
|
||||
|
|
@ -318,7 +341,15 @@ cmath_atan_impl(PyObject *module, Py_complex z)
|
|||
}
|
||||
|
||||
|
||||
static Py_complex atanh_special_values[7][7];
|
||||
static Py_complex atanh_special_values[7][7] = {
|
||||
{ {-0.,-P12}, {-0.,-P12}, {-0.,-P12}, {-0.,P12}, {-0.,P12}, {-0.,P12}, {-0.,N} },
|
||||
{ {-0.,-P12}, {U,U}, {U,U}, {U,U}, {U,U}, {-0.,P12}, {N,N} },
|
||||
{ {-0.,-P12}, {U,U}, {-0.,-0.}, {-0.,0.}, {U,U}, {-0.,P12}, {-0.,N} },
|
||||
{ {0.,-P12}, {U,U}, {0.,-0.}, {0.,0.}, {U,U}, {0.,P12}, {0.,N} },
|
||||
{ {0.,-P12}, {U,U}, {U,U}, {U,U}, {U,U}, {0.,P12}, {N,N} },
|
||||
{ {0.,-P12}, {0.,-P12}, {0.,-P12}, {0.,P12}, {0.,P12}, {0.,P12}, {0.,N} },
|
||||
{ {0.,-P12}, {N,N}, {N,N}, {N,N}, {N,N}, {0.,P12}, {N,N} }
|
||||
};
|
||||
|
||||
/*[clinic input]
|
||||
cmath.atanh = cmath.acos
|
||||
|
|
@ -391,7 +422,15 @@ cmath_cos_impl(PyObject *module, Py_complex z)
|
|||
|
||||
|
||||
/* cosh(infinity + i*y) needs to be dealt with specially */
|
||||
static Py_complex cosh_special_values[7][7];
|
||||
static Py_complex cosh_special_values[7][7] = {
|
||||
{ {INF,N}, {U,U}, {INF,0.}, {INF,-0.}, {U,U}, {INF,N}, {INF,N} },
|
||||
{ {N,N}, {U,U}, {U,U}, {U,U}, {U,U}, {N,N}, {N,N} },
|
||||
{ {N,0.}, {U,U}, {1.,0.}, {1.,-0.}, {U,U}, {N,0.}, {N,0.} },
|
||||
{ {N,0.}, {U,U}, {1.,-0.}, {1.,0.}, {U,U}, {N,0.}, {N,0.} },
|
||||
{ {N,N}, {U,U}, {U,U}, {U,U}, {U,U}, {N,N}, {N,N} },
|
||||
{ {INF,N}, {U,U}, {INF,-0.}, {INF,0.}, {U,U}, {INF,N}, {INF,N} },
|
||||
{ {N,N}, {N,N}, {N,0.}, {N,0.}, {N,N}, {N,N}, {N,N} }
|
||||
};
|
||||
|
||||
/*[clinic input]
|
||||
cmath.cosh = cmath.acos
|
||||
|
|
@ -453,7 +492,15 @@ cmath_cosh_impl(PyObject *module, Py_complex z)
|
|||
|
||||
/* exp(infinity + i*y) and exp(-infinity + i*y) need special treatment for
|
||||
finite y */
|
||||
static Py_complex exp_special_values[7][7];
|
||||
static Py_complex exp_special_values[7][7] = {
|
||||
{ {0.,0.}, {U,U}, {0.,-0.}, {0.,0.}, {U,U}, {0.,0.}, {0.,0.} },
|
||||
{ {N,N}, {U,U}, {U,U}, {U,U}, {U,U}, {N,N}, {N,N} },
|
||||
{ {N,N}, {U,U}, {1.,-0.}, {1.,0.}, {U,U}, {N,N}, {N,N} },
|
||||
{ {N,N}, {U,U}, {1.,-0.}, {1.,0.}, {U,U}, {N,N}, {N,N} },
|
||||
{ {N,N}, {U,U}, {U,U}, {U,U}, {U,U}, {N,N}, {N,N} },
|
||||
{ {INF,N}, {U,U}, {INF,-0.}, {INF,0.}, {U,U}, {INF,N}, {INF,N} },
|
||||
{ {N,N}, {N,N}, {N,-0.}, {N,0.}, {N,N}, {N,N}, {N,N} }
|
||||
};
|
||||
|
||||
/*[clinic input]
|
||||
cmath.exp = cmath.acos
|
||||
|
|
@ -512,7 +559,15 @@ cmath_exp_impl(PyObject *module, Py_complex z)
|
|||
return r;
|
||||
}
|
||||
|
||||
static Py_complex log_special_values[7][7];
|
||||
static Py_complex log_special_values[7][7] = {
|
||||
{ {INF,-P34}, {INF,-P}, {INF,-P}, {INF,P}, {INF,P}, {INF,P34}, {INF,N} },
|
||||
{ {INF,-P12}, {U,U}, {U,U}, {U,U}, {U,U}, {INF,P12}, {N,N} },
|
||||
{ {INF,-P12}, {U,U}, {-INF,-P}, {-INF,P}, {U,U}, {INF,P12}, {N,N} },
|
||||
{ {INF,-P12}, {U,U}, {-INF,-0.}, {-INF,0.}, {U,U}, {INF,P12}, {N,N} },
|
||||
{ {INF,-P12}, {U,U}, {U,U}, {U,U}, {U,U}, {INF,P12}, {N,N} },
|
||||
{ {INF,-P14}, {INF,-0.}, {INF,-0.}, {INF,0.}, {INF,0.}, {INF,P14}, {INF,N} },
|
||||
{ {INF,N}, {N,N}, {N,N}, {N,N}, {N,N}, {INF,N}, {N,N} }
|
||||
};
|
||||
|
||||
static Py_complex
|
||||
c_log(Py_complex z)
|
||||
|
|
@ -628,7 +683,15 @@ cmath_sin_impl(PyObject *module, Py_complex z)
|
|||
|
||||
|
||||
/* sinh(infinity + i*y) needs to be dealt with specially */
|
||||
static Py_complex sinh_special_values[7][7];
|
||||
static Py_complex sinh_special_values[7][7] = {
|
||||
{ {INF,N}, {U,U}, {-INF,-0.}, {-INF,0.}, {U,U}, {INF,N}, {INF,N} },
|
||||
{ {N,N}, {U,U}, {U,U}, {U,U}, {U,U}, {N,N}, {N,N} },
|
||||
{ {0.,N}, {U,U}, {-0.,-0.}, {-0.,0.}, {U,U}, {0.,N}, {0.,N} },
|
||||
{ {0.,N}, {U,U}, {0.,-0.}, {0.,0.}, {U,U}, {0.,N}, {0.,N} },
|
||||
{ {N,N}, {U,U}, {U,U}, {U,U}, {U,U}, {N,N}, {N,N} },
|
||||
{ {INF,N}, {U,U}, {INF,-0.}, {INF,0.}, {U,U}, {INF,N}, {INF,N} },
|
||||
{ {N,N}, {N,N}, {N,-0.}, {N,0.}, {N,N}, {N,N}, {N,N} }
|
||||
};
|
||||
|
||||
/*[clinic input]
|
||||
cmath.sinh = cmath.acos
|
||||
|
|
@ -687,7 +750,15 @@ cmath_sinh_impl(PyObject *module, Py_complex z)
|
|||
}
|
||||
|
||||
|
||||
static Py_complex sqrt_special_values[7][7];
|
||||
static Py_complex sqrt_special_values[7][7] = {
|
||||
{ {INF,-INF}, {0.,-INF}, {0.,-INF}, {0.,INF}, {0.,INF}, {INF,INF}, {N,INF} },
|
||||
{ {INF,-INF}, {U,U}, {U,U}, {U,U}, {U,U}, {INF,INF}, {N,N} },
|
||||
{ {INF,-INF}, {U,U}, {0.,-0.}, {0.,0.}, {U,U}, {INF,INF}, {N,N} },
|
||||
{ {INF,-INF}, {U,U}, {0.,-0.}, {0.,0.}, {U,U}, {INF,INF}, {N,N} },
|
||||
{ {INF,-INF}, {U,U}, {U,U}, {U,U}, {U,U}, {INF,INF}, {N,N} },
|
||||
{ {INF,-INF}, {INF,-0.}, {INF,-0.}, {INF,0.}, {INF,0.}, {INF,INF}, {INF,N} },
|
||||
{ {INF,-INF}, {N,N}, {N,N}, {N,N}, {N,N}, {INF,INF}, {N,N} }
|
||||
};
|
||||
|
||||
/*[clinic input]
|
||||
cmath.sqrt = cmath.acos
|
||||
|
|
@ -786,7 +857,15 @@ cmath_tan_impl(PyObject *module, Py_complex z)
|
|||
|
||||
|
||||
/* tanh(infinity + i*y) needs to be dealt with specially */
|
||||
static Py_complex tanh_special_values[7][7];
|
||||
static Py_complex tanh_special_values[7][7] = {
|
||||
{ {-1.,0.}, {U,U}, {-1.,-0.}, {-1.,0.}, {U,U}, {-1.,0.}, {-1.,0.} },
|
||||
{ {N,N}, {U,U}, {U,U}, {U,U}, {U,U}, {N,N}, {N,N} },
|
||||
{ {-0.0,N}, {U,U}, {-0.,-0.}, {-0.,0.}, {U,U}, {-0.0,N}, {-0.,N} },
|
||||
{ {0.0,N}, {U,U}, {0.,-0.}, {0.,0.}, {U,U}, {0.0,N}, {0.,N} },
|
||||
{ {N,N}, {U,U}, {U,U}, {U,U}, {U,U}, {N,N}, {N,N} },
|
||||
{ {1.,0.}, {U,U}, {1.,-0.}, {1.,0.}, {U,U}, {1.,0.}, {1.,0.} },
|
||||
{ {N,N}, {N,N}, {N,-0.}, {N,0.}, {N,N}, {N,N}, {N,N} }
|
||||
};
|
||||
|
||||
/*[clinic input]
|
||||
cmath.tanh = cmath.acos
|
||||
|
|
@ -969,7 +1048,15 @@ cmath_polar_impl(PyObject *module, Py_complex z)
|
|||
|
||||
*/
|
||||
|
||||
static Py_complex rect_special_values[7][7];
|
||||
static Py_complex rect_special_values[7][7] = {
|
||||
{ {INF,N}, {U,U}, {-INF,0.}, {-INF,-0.}, {U,U}, {INF,N}, {INF,N} },
|
||||
{ {N,N}, {U,U}, {U,U}, {U,U}, {U,U}, {N,N}, {N,N} },
|
||||
{ {0.,0.}, {U,U}, {-0.,0.}, {-0.,-0.}, {U,U}, {0.,0.}, {0.,0.} },
|
||||
{ {0.,0.}, {U,U}, {0.,-0.}, {0.,0.}, {U,U}, {0.,0.}, {0.,0.} },
|
||||
{ {N,N}, {U,U}, {U,U}, {U,U}, {U,U}, {N,N}, {N,N} },
|
||||
{ {INF,N}, {U,U}, {INF,-0.}, {INF,0.}, {U,U}, {INF,N}, {INF,N} },
|
||||
{ {N,N}, {N,N}, {N,0.}, {N,0.}, {N,N}, {N,N}, {N,N} }
|
||||
};
|
||||
|
||||
/*[clinic input]
|
||||
cmath.rect
|
||||
|
|
@ -1202,120 +1289,6 @@ cmath_exec(PyObject *mod)
|
|||
return -1;
|
||||
}
|
||||
|
||||
/* initialize special value tables */
|
||||
|
||||
#define INIT_SPECIAL_VALUES(NAME, BODY) { Py_complex* p = (Py_complex*)NAME; BODY }
|
||||
#define C(REAL, IMAG) p->real = REAL; p->imag = IMAG; ++p;
|
||||
|
||||
INIT_SPECIAL_VALUES(acos_special_values, {
|
||||
C(P34,INF) C(P,INF) C(P,INF) C(P,-INF) C(P,-INF) C(P34,-INF) C(N,INF)
|
||||
C(P12,INF) C(U,U) C(U,U) C(U,U) C(U,U) C(P12,-INF) C(N,N)
|
||||
C(P12,INF) C(U,U) C(P12,0.) C(P12,-0.) C(U,U) C(P12,-INF) C(P12,N)
|
||||
C(P12,INF) C(U,U) C(P12,0.) C(P12,-0.) C(U,U) C(P12,-INF) C(P12,N)
|
||||
C(P12,INF) C(U,U) C(U,U) C(U,U) C(U,U) C(P12,-INF) C(N,N)
|
||||
C(P14,INF) C(0.,INF) C(0.,INF) C(0.,-INF) C(0.,-INF) C(P14,-INF) C(N,INF)
|
||||
C(N,INF) C(N,N) C(N,N) C(N,N) C(N,N) C(N,-INF) C(N,N)
|
||||
})
|
||||
|
||||
INIT_SPECIAL_VALUES(acosh_special_values, {
|
||||
C(INF,-P34) C(INF,-P) C(INF,-P) C(INF,P) C(INF,P) C(INF,P34) C(INF,N)
|
||||
C(INF,-P12) C(U,U) C(U,U) C(U,U) C(U,U) C(INF,P12) C(N,N)
|
||||
C(INF,-P12) C(U,U) C(0.,-P12) C(0.,P12) C(U,U) C(INF,P12) C(N,P12)
|
||||
C(INF,-P12) C(U,U) C(0.,-P12) C(0.,P12) C(U,U) C(INF,P12) C(N,P12)
|
||||
C(INF,-P12) C(U,U) C(U,U) C(U,U) C(U,U) C(INF,P12) C(N,N)
|
||||
C(INF,-P14) C(INF,-0.) C(INF,-0.) C(INF,0.) C(INF,0.) C(INF,P14) C(INF,N)
|
||||
C(INF,N) C(N,N) C(N,N) C(N,N) C(N,N) C(INF,N) C(N,N)
|
||||
})
|
||||
|
||||
INIT_SPECIAL_VALUES(asinh_special_values, {
|
||||
C(-INF,-P14) C(-INF,-0.) C(-INF,-0.) C(-INF,0.) C(-INF,0.) C(-INF,P14) C(-INF,N)
|
||||
C(-INF,-P12) C(U,U) C(U,U) C(U,U) C(U,U) C(-INF,P12) C(N,N)
|
||||
C(-INF,-P12) C(U,U) C(-0.,-0.) C(-0.,0.) C(U,U) C(-INF,P12) C(N,N)
|
||||
C(INF,-P12) C(U,U) C(0.,-0.) C(0.,0.) C(U,U) C(INF,P12) C(N,N)
|
||||
C(INF,-P12) C(U,U) C(U,U) C(U,U) C(U,U) C(INF,P12) C(N,N)
|
||||
C(INF,-P14) C(INF,-0.) C(INF,-0.) C(INF,0.) C(INF,0.) C(INF,P14) C(INF,N)
|
||||
C(INF,N) C(N,N) C(N,-0.) C(N,0.) C(N,N) C(INF,N) C(N,N)
|
||||
})
|
||||
|
||||
INIT_SPECIAL_VALUES(atanh_special_values, {
|
||||
C(-0.,-P12) C(-0.,-P12) C(-0.,-P12) C(-0.,P12) C(-0.,P12) C(-0.,P12) C(-0.,N)
|
||||
C(-0.,-P12) C(U,U) C(U,U) C(U,U) C(U,U) C(-0.,P12) C(N,N)
|
||||
C(-0.,-P12) C(U,U) C(-0.,-0.) C(-0.,0.) C(U,U) C(-0.,P12) C(-0.,N)
|
||||
C(0.,-P12) C(U,U) C(0.,-0.) C(0.,0.) C(U,U) C(0.,P12) C(0.,N)
|
||||
C(0.,-P12) C(U,U) C(U,U) C(U,U) C(U,U) C(0.,P12) C(N,N)
|
||||
C(0.,-P12) C(0.,-P12) C(0.,-P12) C(0.,P12) C(0.,P12) C(0.,P12) C(0.,N)
|
||||
C(0.,-P12) C(N,N) C(N,N) C(N,N) C(N,N) C(0.,P12) C(N,N)
|
||||
})
|
||||
|
||||
INIT_SPECIAL_VALUES(cosh_special_values, {
|
||||
C(INF,N) C(U,U) C(INF,0.) C(INF,-0.) C(U,U) C(INF,N) C(INF,N)
|
||||
C(N,N) C(U,U) C(U,U) C(U,U) C(U,U) C(N,N) C(N,N)
|
||||
C(N,0.) C(U,U) C(1.,0.) C(1.,-0.) C(U,U) C(N,0.) C(N,0.)
|
||||
C(N,0.) C(U,U) C(1.,-0.) C(1.,0.) C(U,U) C(N,0.) C(N,0.)
|
||||
C(N,N) C(U,U) C(U,U) C(U,U) C(U,U) C(N,N) C(N,N)
|
||||
C(INF,N) C(U,U) C(INF,-0.) C(INF,0.) C(U,U) C(INF,N) C(INF,N)
|
||||
C(N,N) C(N,N) C(N,0.) C(N,0.) C(N,N) C(N,N) C(N,N)
|
||||
})
|
||||
|
||||
INIT_SPECIAL_VALUES(exp_special_values, {
|
||||
C(0.,0.) C(U,U) C(0.,-0.) C(0.,0.) C(U,U) C(0.,0.) C(0.,0.)
|
||||
C(N,N) C(U,U) C(U,U) C(U,U) C(U,U) C(N,N) C(N,N)
|
||||
C(N,N) C(U,U) C(1.,-0.) C(1.,0.) C(U,U) C(N,N) C(N,N)
|
||||
C(N,N) C(U,U) C(1.,-0.) C(1.,0.) C(U,U) C(N,N) C(N,N)
|
||||
C(N,N) C(U,U) C(U,U) C(U,U) C(U,U) C(N,N) C(N,N)
|
||||
C(INF,N) C(U,U) C(INF,-0.) C(INF,0.) C(U,U) C(INF,N) C(INF,N)
|
||||
C(N,N) C(N,N) C(N,-0.) C(N,0.) C(N,N) C(N,N) C(N,N)
|
||||
})
|
||||
|
||||
INIT_SPECIAL_VALUES(log_special_values, {
|
||||
C(INF,-P34) C(INF,-P) C(INF,-P) C(INF,P) C(INF,P) C(INF,P34) C(INF,N)
|
||||
C(INF,-P12) C(U,U) C(U,U) C(U,U) C(U,U) C(INF,P12) C(N,N)
|
||||
C(INF,-P12) C(U,U) C(-INF,-P) C(-INF,P) C(U,U) C(INF,P12) C(N,N)
|
||||
C(INF,-P12) C(U,U) C(-INF,-0.) C(-INF,0.) C(U,U) C(INF,P12) C(N,N)
|
||||
C(INF,-P12) C(U,U) C(U,U) C(U,U) C(U,U) C(INF,P12) C(N,N)
|
||||
C(INF,-P14) C(INF,-0.) C(INF,-0.) C(INF,0.) C(INF,0.) C(INF,P14) C(INF,N)
|
||||
C(INF,N) C(N,N) C(N,N) C(N,N) C(N,N) C(INF,N) C(N,N)
|
||||
})
|
||||
|
||||
INIT_SPECIAL_VALUES(sinh_special_values, {
|
||||
C(INF,N) C(U,U) C(-INF,-0.) C(-INF,0.) C(U,U) C(INF,N) C(INF,N)
|
||||
C(N,N) C(U,U) C(U,U) C(U,U) C(U,U) C(N,N) C(N,N)
|
||||
C(0.,N) C(U,U) C(-0.,-0.) C(-0.,0.) C(U,U) C(0.,N) C(0.,N)
|
||||
C(0.,N) C(U,U) C(0.,-0.) C(0.,0.) C(U,U) C(0.,N) C(0.,N)
|
||||
C(N,N) C(U,U) C(U,U) C(U,U) C(U,U) C(N,N) C(N,N)
|
||||
C(INF,N) C(U,U) C(INF,-0.) C(INF,0.) C(U,U) C(INF,N) C(INF,N)
|
||||
C(N,N) C(N,N) C(N,-0.) C(N,0.) C(N,N) C(N,N) C(N,N)
|
||||
})
|
||||
|
||||
INIT_SPECIAL_VALUES(sqrt_special_values, {
|
||||
C(INF,-INF) C(0.,-INF) C(0.,-INF) C(0.,INF) C(0.,INF) C(INF,INF) C(N,INF)
|
||||
C(INF,-INF) C(U,U) C(U,U) C(U,U) C(U,U) C(INF,INF) C(N,N)
|
||||
C(INF,-INF) C(U,U) C(0.,-0.) C(0.,0.) C(U,U) C(INF,INF) C(N,N)
|
||||
C(INF,-INF) C(U,U) C(0.,-0.) C(0.,0.) C(U,U) C(INF,INF) C(N,N)
|
||||
C(INF,-INF) C(U,U) C(U,U) C(U,U) C(U,U) C(INF,INF) C(N,N)
|
||||
C(INF,-INF) C(INF,-0.) C(INF,-0.) C(INF,0.) C(INF,0.) C(INF,INF) C(INF,N)
|
||||
C(INF,-INF) C(N,N) C(N,N) C(N,N) C(N,N) C(INF,INF) C(N,N)
|
||||
})
|
||||
|
||||
INIT_SPECIAL_VALUES(tanh_special_values, {
|
||||
C(-1.,0.) C(U,U) C(-1.,-0.) C(-1.,0.) C(U,U) C(-1.,0.) C(-1.,0.)
|
||||
C(N,N) C(U,U) C(U,U) C(U,U) C(U,U) C(N,N) C(N,N)
|
||||
C(-0.0,N) C(U,U) C(-0.,-0.) C(-0.,0.) C(U,U) C(-0.0,N) C(-0.,N)
|
||||
C(0.0,N) C(U,U) C(0.,-0.) C(0.,0.) C(U,U) C(0.0,N) C(0.,N)
|
||||
C(N,N) C(U,U) C(U,U) C(U,U) C(U,U) C(N,N) C(N,N)
|
||||
C(1.,0.) C(U,U) C(1.,-0.) C(1.,0.) C(U,U) C(1.,0.) C(1.,0.)
|
||||
C(N,N) C(N,N) C(N,-0.) C(N,0.) C(N,N) C(N,N) C(N,N)
|
||||
})
|
||||
|
||||
INIT_SPECIAL_VALUES(rect_special_values, {
|
||||
C(INF,N) C(U,U) C(-INF,0.) C(-INF,-0.) C(U,U) C(INF,N) C(INF,N)
|
||||
C(N,N) C(U,U) C(U,U) C(U,U) C(U,U) C(N,N) C(N,N)
|
||||
C(0.,0.) C(U,U) C(-0.,0.) C(-0.,-0.) C(U,U) C(0.,0.) C(0.,0.)
|
||||
C(0.,0.) C(U,U) C(0.,-0.) C(0.,0.) C(U,U) C(0.,0.) C(0.,0.)
|
||||
C(N,N) C(U,U) C(U,U) C(U,U) C(U,U) C(N,N) C(N,N)
|
||||
C(INF,N) C(U,U) C(INF,-0.) C(INF,0.) C(U,U) C(INF,N) C(INF,N)
|
||||
C(N,N) C(N,N) C(N,0.) C(N,0.) C(N,N) C(N,N) C(N,N)
|
||||
})
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue