diff options
Diffstat (limited to 'mathfuncs_log.h')
-rw-r--r-- | mathfuncs_log.h | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/mathfuncs_log.h b/mathfuncs_log.h index 8d99a62..0a40eec 100644 --- a/mathfuncs_log.h +++ b/mathfuncs_log.h @@ -31,14 +31,23 @@ namespace vecmathlib { realvec_t r; switch (sizeof(real_t)) { case 4: +#ifdef VML_HAVE_FP_CONTRACT // float, error=5.98355642684398209498469870525e-9 r = RV(0.410981538282433293325329456838); r = fma(r, y2, RV(0.402155483172044562892705980539)); r = fma(r, y2, RV(0.57755014627178237959721643293)); r = fma(r, y2, RV(0.96178780600659929206930296869)); r = fma(r, y2, RV(2.88539012786343587248965772685)); +#else + //flaot, error=2.25468184051947656525068987795e-7 + r = RV(0.498866687070343238590910977481); + r = fma(r, y2, RV(0.57002741193682764193895550312)); + r = fma(r, y2, RV(0.96200215034262628756932169194)); + r = fma(r, y2, RV(2.88538850388042106595516956395)); +#endif break; case 8: +#ifdef VML_HAVE_FP_CONTRACT // double, error=9.45037202901655672811489051683e-17 r = RV(0.259935726478127940817401224248); r = fma(r, y2, RV(0.140676370079882918464564658472)); @@ -50,6 +59,17 @@ namespace vecmathlib { r = fma(r, y2, RV(0.57707801621733949207376840932)); r = fma(r, y2, RV(0.96179669392666302667713134701)); r = fma(r, y2, RV(2.88539008177792581277410991327)); +#else + // double, error=1.21820548287702216975532695788e-13 + r = RV(0.293251364683280430617251942017); + r = fma(r, y2, RV(0.201364223624519571276587631354)); + r = fma(r, y2, RV(0.264443947645547871780098560836)); + r = fma(r, y2, RV(0.320475051320227723946459855458)); + r = fma(r, y2, RV(0.412202612052105347480086431555)); + r = fma(r, y2, RV(0.57707794741938820005328259256)); + r = fma(r, y2, RV(0.96179669445173881282808321929)); + r = fma(r, y2, RV(2.88539008177676567117601117274)); +#endif break; default: __builtin_unreachable(); |