@@ -248,9 +248,44 @@ PyTypeObject QuadPrecision_Type = {
248
248
.tp_richcompare = (richcmpfunc )quad_richcompare ,
249
249
};
250
250
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
+
251
264
int
252
265
init_quadprecision_scalar (void )
253
266
{
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
+
255
290
return PyType_Ready (& QuadPrecision_Type );
256
291
}
0 commit comments