@@ -248,9 +248,44 @@ PyTypeObject QuadPrecision_Type = {
248248 .tp_richcompare = (richcmpfunc )quad_richcompare ,
249249};
250250
251+ QuadPrecisionObject * initialize_constants (const Sleef_quad value , QuadBackendType backend )
252+ {
253+ QuadPrecisionObject * obj = QuadPrecision_raw_new (backend );
254+ if (backend == BACKEND_SLEEF ) {
255+ obj -> value .sleef_value = value ;
256+ }
257+ else {
258+ obj -> value .longdouble_value = Sleef_cast_to_doubleq1 (value );
259+ }
260+
261+ return obj ;
262+ }
263+
251264int
252265init_quadprecision_scalar (void )
253266{
254- // QuadPrecision_Type.tp_base = &PyFloatingArrType_Type;
267+ QuadPrecisionObject * QuadPrecision_pi = initialize_constants (SLEEF_M_PIq , BACKEND_SLEEF );
268+ QuadPrecisionObject * QuadPrecision_e = initialize_constants (SLEEF_M_Eq , BACKEND_SLEEF );
269+ QuadPrecisionObject * QuadPrecision_log2e = initialize_constants (SLEEF_M_LOG2Eq , BACKEND_SLEEF );
270+ QuadPrecisionObject * QuadPrecision_log10e = initialize_constants (SLEEF_M_LOG10Eq , BACKEND_SLEEF );
271+ QuadPrecisionObject * QuadPrecision_ln2 = initialize_constants (SLEEF_M_LN2q , BACKEND_SLEEF );
272+ QuadPrecisionObject * QuadPrecision_ln10 = initialize_constants (SLEEF_M_LN10q , BACKEND_SLEEF );
273+ QuadPrecisionObject * QuadPrecision_sqrt2 = initialize_constants (SLEEF_M_SQRT2q , BACKEND_SLEEF );
274+ QuadPrecisionObject * QuadPrecision_sqrt3 = initialize_constants (SLEEF_M_SQRT3q , BACKEND_SLEEF );
275+ QuadPrecisionObject * QuadPrecision_egamma = initialize_constants (SLEEF_M_EGAMMAq , BACKEND_SLEEF );
276+ QuadPrecisionObject * QuadPrecision_phi = initialize_constants (SLEEF_M_PHIq , BACKEND_SLEEF );
277+ QuadPrecisionObject * QuadPrecision_quad_max = initialize_constants (SLEEF_QUAD_MAX , BACKEND_SLEEF );
278+ QuadPrecisionObject * QuadPrecision_quad_min = initialize_constants (SLEEF_QUAD_MIN , BACKEND_SLEEF );
279+ QuadPrecisionObject * QuadPrecision_quad_epsilon = initialize_constants (SLEEF_QUAD_EPSILON , BACKEND_SLEEF );
280+ QuadPrecisionObject * QuadPrecision_quad_denorm_min = initialize_constants (SLEEF_QUAD_DENORM_MIN , BACKEND_SLEEF );
281+
282+ if (!QuadPrecision_pi || !QuadPrecision_e || !QuadPrecision_log2e || !QuadPrecision_log10e ||
283+ !QuadPrecision_ln2 || !QuadPrecision_ln10 || !QuadPrecision_sqrt2 || !QuadPrecision_sqrt3 ||
284+ !QuadPrecision_egamma || !QuadPrecision_phi || !QuadPrecision_quad_max || !QuadPrecision_quad_min ||
285+ !QuadPrecision_quad_epsilon || !QuadPrecision_quad_denorm_min ) {
286+ PyErr_SetString (PyExc_RuntimeError , "Failed to initialize QuadPrecision constants" );
287+ return -1 ;
288+ }
289+
255290 return PyType_Ready (& QuadPrecision_Type );
256291}
0 commit comments