Ignore:
Timestamp:
Sep 4, 2011, 2:28:56 PM (9 years ago)
Author:
sam
Message:

core: improve tan() accuracy by tweaking higher order Taylor coefficients.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/test/trig.cpp

    r899 r900  
    9494        }
    9595
    96         for (int i = -10000; i < 10000; i++)
     96        for (int i = -100000; i < 100000; i++)
    9797        {
    98             double f = (double)i * (1.0 / 1000.0);
     98            double f = (double)i * (1.0 / 10000.0);
    9999            double a = __builtin_tan(f);
    100100            double b = lol_tan(f);
    101             CPPUNIT_ASSERT(fabs(a - b) <= fabs(a) * 1e-11);
     101            if (fabs(a) > 1e4)
     102               CPPUNIT_ASSERT(fabs(a - b) <= fabs(a) * fabs(a) * 1e-11);
     103            else if (fabs(a) > 1.0)
     104               CPPUNIT_ASSERT(fabs(a - b) <= fabs(a) * 1e-11);
     105            else
     106               CPPUNIT_ASSERT(fabs(a - b) <= fabs(f) * 1e-11);
    102107        }
    103108
     
    107112            double a = __builtin_tan(f);
    108113            double b = lol_tan(f);
    109             CPPUNIT_ASSERT(fabs(a - b) <= fabs(a) * 1e-11);
     114            if (fabs(a) > 1e4)
     115               CPPUNIT_ASSERT(fabs(a - b) <= fabs(a) * fabs(a) * 1e-11);
     116            else if (fabs(a) > 1.0)
     117               CPPUNIT_ASSERT(fabs(a - b) <= fabs(a) * 1e-11);
     118            else
     119               CPPUNIT_ASSERT(fabs(a - b) <= fabs(f) * 1e-11);
    110120        }
    111121    }
Note: See TracChangeset for help on using the changeset viewer.