updated bw_math ChangeLog + more math tests

This commit is contained in:
Stefano D'Angelo 2023-08-10 07:48:14 +02:00
parent 88fad66dd6
commit ffe1db7749
2 changed files with 200 additions and 8 deletions

View File

@ -46,8 +46,19 @@
* <ul>
* <li>Version <strong>1.0.0</strong>:
* <ul>
* <li>WRITEME: document changes!!!</li>
* <li>Avoided using reserved identifiers.</li>
* <li>Renamed <code>bw_min0xf()</code> as <code>bw_min0f()</code> and
* <code>bw_max0xf()</code> as <code>bw_max0f()</code>.</li>
* <li>New implementations for <code>bw_min0f()</code>,
* <code>bw_max0f()</code>, <code>bw_minf()</code>,
* <code>bw_maxf()</code>, and <code>bw_clipf()</code>.</li>
* <li>Fixed rounding bug in <code>bw_roundf()</code> when absolute
* value of input was in [<code>0.5f</code>,
* <code>1.f</code>].</li>
* <li>Fixed <code>bw_ceilf()</code> for negative input values.</li>
* <li>Removed usage of reserved identifiers and designated
* initializers.</li>
* <li>Improved documentation w.r.t. validity of input values and
* approximation errors.</li>
* </ul>
* </li>
* <li>Version <strong>0.6.0</strong>:
@ -263,7 +274,7 @@ static inline float bw_sin2pif_3(float x);
* Returns an approximation of the sine of 2 * pi * `x`, where `x` is given
* in radians.
*
* Absolute error < 0.011, relative error < 1.7%.
* Absolute error < 0.011 or relative error < 1.7%, whatever is worse.
*
* `x` must be finite.
*
@ -274,7 +285,7 @@ static inline float bw_sinf_3(float x);
* Returns an approximation of the sine of `x`, where `x` is given in
* radians.
*
* Absolute error < 0.011, relative error < 1.7%.
* Absolute error < 0.011 or relative error < 1.7%, whatever is worse.
*
* `x` must be finite.
*
@ -285,7 +296,7 @@ static inline float bw_cos2pif_3(float x);
* Returns an approximation of the cosine of 2 * pi * `x`, where `x` is given
* in radians.
*
* Absolute error < 0.011, relative error < 1.7%.
* Absolute error < 0.011 or relative error < 1.7%, whatever is worse.
*
* `x` must be finite.
*
@ -296,7 +307,7 @@ static inline float bw_cosf_3(float x);
* Returns an approximation of the cosine of `x`, where `x` is given in
* radians.
*
* Absolute error < 0.011, relative error < 1.7%.
* Absolute error < 0.011 or relative error < 1.7%, whatever is worse.
*
* `x` must be finite.
*
@ -311,7 +322,7 @@ static inline float bw_tan2pif_3(float x);
* range: `x` in [-1/4 + 5e-4f / pi, 1/4 - 5e-4f / pi] + k / 2, where k is
* any integer number.
*
* Absolute error < 0.06, relative error < 0.8%.
* Absolute error < 0.06 or relative error < 0.8%, whatever is worse.
*
* `x` must be finite.
*
@ -326,7 +337,7 @@ static inline float bw_tanf_3(float x);
* range: `x` in [-pi/2 + 1e-3f, pi/2 - 1e-3f] + k * pi, where k is any
* integer number.
*
* Absolute error < 0.06, relative error < 0.8%.
* Absolute error < 0.06 or relative error < 0.8%, whatever is worse.
*
* `x` must be finite.
*

View File

@ -656,6 +656,187 @@ int main() {
TEST_ABS_REL(bw_sin2pif_3(-56.78f), sinf(6.283185307f * -56.78f), 0.011f, 0.017);
TEST_ABS_REL(bw_sin2pif_3(-567.8f), sinf(6.283185307f * -567.8f), 0.011f, 0.017);
TEST_ABS_REL(bw_sin2pif_3(-5678.f), sinf(6.283185307f * -5678.f), 0.011f, 0.017);
TEST_ABS_REL(bw_sinf_3(0.f), sinf(0.f), 0.011f, 0.017);
TEST_ABS_REL(bw_sinf_3(0.5f), sinf(0.5f), 0.011f, 0.017);
TEST_ABS_REL(bw_sinf_3(1.0f), sinf(1.0f), 0.011f, 0.017);
TEST_ABS_REL(bw_sinf_3(1.5f), sinf(1.5f), 0.011f, 0.017);
TEST_ABS_REL(bw_sinf_3(2.0f), sinf(2.0f), 0.011f, 0.017);
TEST_ABS_REL(bw_sinf_3(2.5f), sinf(2.5f), 0.011f, 0.017);
TEST_ABS_REL(bw_sinf_3(3.0f), sinf(3.0f), 0.011f, 0.017);
TEST_ABS_REL(bw_sinf_3(3.5f), sinf(3.5f), 0.011f, 0.017);
TEST_ABS_REL(bw_sinf_3(4.0f), sinf(4.0f), 0.011f, 0.017);
TEST_ABS_REL(bw_sinf_3(4.5f), sinf(4.5f), 0.011f, 0.017);
TEST_ABS_REL(bw_sinf_3(5.0f), sinf(5.0f), 0.011f, 0.017);
TEST_ABS_REL(bw_sinf_3(5.5f), sinf(5.5f), 0.011f, 0.017);
TEST_ABS_REL(bw_sinf_3(6.0f), sinf(6.0f), 0.011f, 0.017);
TEST_ABS_REL(bw_sinf_3(5.678f), sinf(5.678f), 0.011f, 0.017);
TEST_ABS_REL(bw_sinf_3(56.78f), sinf(56.78f), 0.011f, 0.017);
TEST_ABS_REL(bw_sinf_3(567.8f), sinf(567.8f), 0.011f, 0.017);
TEST_ABS_REL(bw_sinf_3(5678.f), sinf(5678.f), 0.011f, 0.017);
TEST_ABS_REL(bw_sinf_3(-0.f), sinf(-0.f), 0.011f, 0.017);
TEST_ABS_REL(bw_sinf_3(-0.5f), sinf(-0.5f), 0.011f, 0.017);
TEST_ABS_REL(bw_sinf_3(-1.0f), sinf(-1.0f), 0.011f, 0.017);
TEST_ABS_REL(bw_sinf_3(-1.5f), sinf(-1.5f), 0.011f, 0.017);
TEST_ABS_REL(bw_sinf_3(-2.0f), sinf(-2.0f), 0.011f, 0.017);
TEST_ABS_REL(bw_sinf_3(-2.5f), sinf(-2.5f), 0.011f, 0.017);
TEST_ABS_REL(bw_sinf_3(-3.0f), sinf(-3.0f), 0.011f, 0.017);
TEST_ABS_REL(bw_sinf_3(-3.5f), sinf(-3.5f), 0.011f, 0.017);
TEST_ABS_REL(bw_sinf_3(-4.0f), sinf(-4.0f), 0.011f, 0.017);
TEST_ABS_REL(bw_sinf_3(-4.5f), sinf(-4.5f), 0.011f, 0.017);
TEST_ABS_REL(bw_sinf_3(-5.0f), sinf(-5.0f), 0.011f, 0.017);
TEST_ABS_REL(bw_sinf_3(-5.5f), sinf(-5.5f), 0.011f, 0.017);
TEST_ABS_REL(bw_sinf_3(-6.0f), sinf(-6.0f), 0.011f, 0.017);
TEST_ABS_REL(bw_sinf_3(-5.678f), sinf(-5.678f), 0.011f, 0.017);
TEST_ABS_REL(bw_sinf_3(-56.78f), sinf(-56.78f), 0.011f, 0.017);
TEST_ABS_REL(bw_sinf_3(-567.8f), sinf(-567.8f), 0.011f, 0.017);
TEST_ABS_REL(bw_sinf_3(-5678.f), sinf(-5678.f), 0.011f, 0.017);
TEST_ABS_REL(bw_cos2pif_3(0.f), cosf(6.283185307f * 0.f), 0.011f, 0.017);
TEST_ABS_REL(bw_cos2pif_3(0.1f), cosf(6.283185307f * 0.1f), 0.011f, 0.017);
TEST_ABS_REL(bw_cos2pif_3(0.2f), cosf(6.283185307f * 0.2f), 0.011f, 0.017);
TEST_ABS_REL(bw_cos2pif_3(0.3f), cosf(6.283185307f * 0.3f), 0.011f, 0.017);
TEST_ABS_REL(bw_cos2pif_3(0.4f), cosf(6.283185307f * 0.4f), 0.011f, 0.017);
TEST_ABS_REL(bw_cos2pif_3(0.5f), cosf(6.283185307f * 0.5f), 0.011f, 0.017);
TEST_ABS_REL(bw_cos2pif_3(0.6f), cosf(6.283185307f * 0.6f), 0.011f, 0.017);
TEST_ABS_REL(bw_cos2pif_3(0.7f), cosf(6.283185307f * 0.7f), 0.011f, 0.017);
TEST_ABS_REL(bw_cos2pif_3(0.8f), cosf(6.283185307f * 0.8f), 0.011f, 0.017);
TEST_ABS_REL(bw_cos2pif_3(0.9f), cosf(6.283185307f * 0.9f), 0.011f, 0.017);
TEST_ABS_REL(bw_cos2pif_3(1.f), cosf(6.283185307f * 1.f), 0.011f, 0.017);
TEST_ABS_REL(bw_cos2pif_3(5.678f), cosf(6.283185307f * 5.678f), 0.011f, 0.017);
TEST_ABS_REL(bw_cos2pif_3(56.78f), cosf(6.283185307f * 56.78f), 0.011f, 0.017);
TEST_ABS_REL(bw_cos2pif_3(567.8f), cosf(6.283185307f * 567.8f), 0.011f, 0.017);
TEST_ABS_REL(bw_cos2pif_3(5678.f), cosf(6.283185307f * 5678.f), 0.011f, 0.017);
TEST_ABS_REL(bw_cos2pif_3(-0.f), cosf(6.283185307f * -0.f), 0.011f, 0.017);
TEST_ABS_REL(bw_cos2pif_3(-0.1f), cosf(6.283185307f * -0.1f), 0.011f, 0.017);
TEST_ABS_REL(bw_cos2pif_3(-0.2f), cosf(6.283185307f * -0.2f), 0.011f, 0.017);
TEST_ABS_REL(bw_cos2pif_3(-0.3f), cosf(6.283185307f * -0.3f), 0.011f, 0.017);
TEST_ABS_REL(bw_cos2pif_3(-0.4f), cosf(6.283185307f * -0.4f), 0.011f, 0.017);
TEST_ABS_REL(bw_cos2pif_3(-0.5f), cosf(6.283185307f * -0.5f), 0.011f, 0.017);
TEST_ABS_REL(bw_cos2pif_3(-0.6f), cosf(6.283185307f * -0.6f), 0.011f, 0.017);
TEST_ABS_REL(bw_cos2pif_3(-0.7f), cosf(6.283185307f * -0.7f), 0.011f, 0.017);
TEST_ABS_REL(bw_cos2pif_3(-0.8f), cosf(6.283185307f * -0.8f), 0.011f, 0.017);
TEST_ABS_REL(bw_cos2pif_3(-0.9f), cosf(6.283185307f * -0.9f), 0.011f, 0.017);
TEST_ABS_REL(bw_cos2pif_3(-1.f), cosf(6.283185307f * -1.f), 0.011f, 0.017);
TEST_ABS_REL(bw_cos2pif_3(-5.678f), cosf(6.283185307f * -5.678f), 0.011f, 0.017);
TEST_ABS_REL(bw_cos2pif_3(-56.78f), cosf(6.283185307f * -56.78f), 0.011f, 0.017);
TEST_ABS_REL(bw_cos2pif_3(-567.8f), cosf(6.283185307f * -567.8f), 0.011f, 0.017);
TEST_ABS_REL(bw_cos2pif_3(-5678.f), cosf(6.283185307f * -5678.f), 0.011f, 0.017);
TEST_ABS_REL(bw_cosf_3(0.f), cosf(0.f), 0.011f, 0.017);
TEST_ABS_REL(bw_cosf_3(0.5f), cosf(0.5f), 0.011f, 0.017);
TEST_ABS_REL(bw_cosf_3(1.0f), cosf(1.0f), 0.011f, 0.017);
TEST_ABS_REL(bw_cosf_3(1.5f), cosf(1.5f), 0.011f, 0.017);
TEST_ABS_REL(bw_cosf_3(2.0f), cosf(2.0f), 0.011f, 0.017);
TEST_ABS_REL(bw_cosf_3(2.5f), cosf(2.5f), 0.011f, 0.017);
TEST_ABS_REL(bw_cosf_3(3.0f), cosf(3.0f), 0.011f, 0.017);
TEST_ABS_REL(bw_cosf_3(3.5f), cosf(3.5f), 0.011f, 0.017);
TEST_ABS_REL(bw_cosf_3(4.0f), cosf(4.0f), 0.011f, 0.017);
TEST_ABS_REL(bw_cosf_3(4.5f), cosf(4.5f), 0.011f, 0.017);
TEST_ABS_REL(bw_cosf_3(5.0f), cosf(5.0f), 0.011f, 0.017);
TEST_ABS_REL(bw_cosf_3(5.5f), cosf(5.5f), 0.011f, 0.017);
TEST_ABS_REL(bw_cosf_3(6.0f), cosf(6.0f), 0.011f, 0.017);
TEST_ABS_REL(bw_cosf_3(5.678f), cosf(5.678f), 0.011f, 0.017);
TEST_ABS_REL(bw_cosf_3(56.78f), cosf(56.78f), 0.011f, 0.017);
TEST_ABS_REL(bw_cosf_3(567.8f), cosf(567.8f), 0.011f, 0.017);
TEST_ABS_REL(bw_cosf_3(5678.f), cosf(5678.f), 0.011f, 0.017);
TEST_ABS_REL(bw_cosf_3(-0.f), cosf(-0.f), 0.011f, 0.017);
TEST_ABS_REL(bw_cosf_3(-0.5f), cosf(-0.5f), 0.011f, 0.017);
TEST_ABS_REL(bw_cosf_3(-1.0f), cosf(-1.0f), 0.011f, 0.017);
TEST_ABS_REL(bw_cosf_3(-1.5f), cosf(-1.5f), 0.011f, 0.017);
TEST_ABS_REL(bw_cosf_3(-2.0f), cosf(-2.0f), 0.011f, 0.017);
TEST_ABS_REL(bw_cosf_3(-2.5f), cosf(-2.5f), 0.011f, 0.017);
TEST_ABS_REL(bw_cosf_3(-3.0f), cosf(-3.0f), 0.011f, 0.017);
TEST_ABS_REL(bw_cosf_3(-3.5f), cosf(-3.5f), 0.011f, 0.017);
TEST_ABS_REL(bw_cosf_3(-4.0f), cosf(-4.0f), 0.011f, 0.017);
TEST_ABS_REL(bw_cosf_3(-4.5f), cosf(-4.5f), 0.011f, 0.017);
TEST_ABS_REL(bw_cosf_3(-5.0f), cosf(-5.0f), 0.011f, 0.017);
TEST_ABS_REL(bw_cosf_3(-5.5f), cosf(-5.5f), 0.011f, 0.017);
TEST_ABS_REL(bw_cosf_3(-6.0f), cosf(-6.0f), 0.011f, 0.017);
TEST_ABS_REL(bw_cosf_3(-5.678f), cosf(-5.678f), 0.011f, 0.017);
TEST_ABS_REL(bw_cosf_3(-56.78f), cosf(-56.78f), 0.011f, 0.017);
TEST_ABS_REL(bw_cosf_3(-567.8f), cosf(-567.8f), 0.011f, 0.017);
TEST_ABS_REL(bw_cosf_3(-5678.f), cosf(-5678.f), 0.011f, 0.017);
TEST_ABS_REL(bw_tan2pif_3(0.f), tanf(6.283185307f * 0.f), 0.06f, 0.008);
TEST_ABS_REL(bw_tan2pif_3(0.02f), tanf(6.283185307f * 0.02f), 0.06f, 0.008);
TEST_ABS_REL(bw_tan2pif_3(0.04f), tanf(6.283185307f * 0.04f), 0.06f, 0.008);
TEST_ABS_REL(bw_tan2pif_3(0.06f), tanf(6.283185307f * 0.06f), 0.06f, 0.008);
TEST_ABS_REL(bw_tan2pif_3(0.08f), tanf(6.283185307f * 0.08f), 0.06f, 0.008);
TEST_ABS_REL(bw_tan2pif_3(0.10f), tanf(6.283185307f * 0.10f), 0.06f, 0.008);
TEST_ABS_REL(bw_tan2pif_3(0.12f), tanf(6.283185307f * 0.12f), 0.06f, 0.008);
TEST_ABS_REL(bw_tan2pif_3(0.14f), tanf(6.283185307f * 0.14f), 0.06f, 0.008);
TEST_ABS_REL(bw_tan2pif_3(0.16f), tanf(6.283185307f * 0.16f), 0.06f, 0.008);
TEST_ABS_REL(bw_tan2pif_3(0.18f), tanf(6.283185307f * 0.18f), 0.06f, 0.008);
TEST_ABS_REL(bw_tan2pif_3(0.20f), tanf(6.283185307f * 0.20f), 0.06f, 0.008);
TEST_ABS_REL(bw_tan2pif_3(0.22f), tanf(6.283185307f * 0.22f), 0.06f, 0.008);
TEST_ABS_REL(bw_tan2pif_3(0.24f), tanf(6.283185307f * 0.24f), 0.06f, 0.008);
TEST_ABS_REL(bw_tan2pif_3(0.249f), tanf(6.283185307f * 0.249f), 0.06f, 0.008);
TEST_ABS_REL(bw_tan2pif_3(5.678f), tanf(6.283185307f * 5.678f), 0.06f, 0.008);
TEST_ABS_REL(bw_tan2pif_3(56.78f), tanf(6.283185307f * 56.78f), 0.06f, 0.008);
TEST_ABS_REL(bw_tan2pif_3(567.8f), tanf(6.283185307f * 567.8f), 0.06f, 0.008);
TEST_ABS_REL(bw_tan2pif_3(5678.f), tanf(6.283185307f * 5678.f), 0.06f, 0.008);
TEST_ABS_REL(bw_tan2pif_3(-0.f), tanf(6.283185307f * -0.f), 0.06f, 0.008);
TEST_ABS_REL(bw_tan2pif_3(-0.02f), tanf(6.283185307f * -0.02f), 0.06f, 0.008);
TEST_ABS_REL(bw_tan2pif_3(-0.04f), tanf(6.283185307f * -0.04f), 0.06f, 0.008);
TEST_ABS_REL(bw_tan2pif_3(-0.06f), tanf(6.283185307f * -0.06f), 0.06f, 0.008);
TEST_ABS_REL(bw_tan2pif_3(-0.08f), tanf(6.283185307f * -0.08f), 0.06f, 0.008);
TEST_ABS_REL(bw_tan2pif_3(-0.10f), tanf(6.283185307f * -0.10f), 0.06f, 0.008);
TEST_ABS_REL(bw_tan2pif_3(-0.12f), tanf(6.283185307f * -0.12f), 0.06f, 0.008);
TEST_ABS_REL(bw_tan2pif_3(-0.14f), tanf(6.283185307f * -0.14f), 0.06f, 0.008);
TEST_ABS_REL(bw_tan2pif_3(-0.16f), tanf(6.283185307f * -0.16f), 0.06f, 0.008);
TEST_ABS_REL(bw_tan2pif_3(-0.18f), tanf(6.283185307f * -0.18f), 0.06f, 0.008);
TEST_ABS_REL(bw_tan2pif_3(-0.20f), tanf(6.283185307f * -0.20f), 0.06f, 0.008);
TEST_ABS_REL(bw_tan2pif_3(-0.22f), tanf(6.283185307f * -0.22f), 0.06f, 0.008);
TEST_ABS_REL(bw_tan2pif_3(-0.24f), tanf(6.283185307f * -0.24f), 0.06f, 0.008);
TEST_ABS_REL(bw_tan2pif_3(-0.249f), tanf(6.283185307f * -0.249f), 0.06f, 0.008);
TEST_ABS_REL(bw_tan2pif_3(-5.678f), tanf(6.283185307f * -5.678f), 0.06f, 0.008);
TEST_ABS_REL(bw_tan2pif_3(-56.78f), tanf(6.283185307f * -56.78f), 0.06f, 0.008);
TEST_ABS_REL(bw_tan2pif_3(-567.8f), tanf(6.283185307f * -567.8f), 0.06f, 0.008);
TEST_ABS_REL(bw_tan2pif_3(-5678.f), tanf(6.283185307f * -5678.f), 0.06f, 0.008);
TEST_ABS_REL(bw_tanf_3(0.f), tanf(0.f), 0.06f, 0.008);
TEST_ABS_REL(bw_tanf_3(0.1f), tanf(0.1f), 0.06f, 0.008);
TEST_ABS_REL(bw_tanf_3(0.2f), tanf(0.2f), 0.06f, 0.008);
TEST_ABS_REL(bw_tanf_3(0.3f), tanf(0.3f), 0.06f, 0.008);
TEST_ABS_REL(bw_tanf_3(0.4f), tanf(0.4f), 0.06f, 0.008);
TEST_ABS_REL(bw_tanf_3(0.5f), tanf(0.5f), 0.06f, 0.008);
TEST_ABS_REL(bw_tanf_3(0.6f), tanf(0.6f), 0.06f, 0.008);
TEST_ABS_REL(bw_tanf_3(0.7f), tanf(0.7f), 0.06f, 0.008);
TEST_ABS_REL(bw_tanf_3(0.8f), tanf(0.8f), 0.06f, 0.008);
TEST_ABS_REL(bw_tanf_3(0.9f), tanf(0.9f), 0.06f, 0.008);
TEST_ABS_REL(bw_tanf_3(1.0f), tanf(1.0f), 0.06f, 0.008);
TEST_ABS_REL(bw_tanf_3(1.1f), tanf(1.1f), 0.06f, 0.008);
TEST_ABS_REL(bw_tanf_3(1.2f), tanf(1.2f), 0.06f, 0.008);
TEST_ABS_REL(bw_tanf_3(1.3f), tanf(1.3f), 0.06f, 0.008);
TEST_ABS_REL(bw_tanf_3(1.4f), tanf(1.4f), 0.06f, 0.008);
TEST_ABS_REL(bw_tanf_3(1.5f), tanf(1.5f), 0.06f, 0.008);
TEST_ABS_REL(bw_tanf_3(1.56f), tanf(1.56f), 0.06f, 0.008);
TEST_ABS_REL(bw_tanf_3(5.678f), tanf(5.678f), 0.06f, 0.008);
TEST_ABS_REL(bw_tanf_3(56.78f), tanf(56.78f), 0.06f, 0.008);
TEST_ABS_REL(bw_tanf_3(567.8f), tanf(567.8f), 0.06f, 0.008);
TEST_ABS_REL(bw_tanf_3(5678.f), tanf(5678.f), 0.06f, 0.008);
TEST_ABS_REL(bw_tanf_3(-0.f), tanf(-0.f), 0.06f, 0.008);
TEST_ABS_REL(bw_tanf_3(-0.1f), tanf(-0.1f), 0.06f, 0.008);
TEST_ABS_REL(bw_tanf_3(-0.2f), tanf(-0.2f), 0.06f, 0.008);
TEST_ABS_REL(bw_tanf_3(-0.3f), tanf(-0.3f), 0.06f, 0.008);
TEST_ABS_REL(bw_tanf_3(-0.4f), tanf(-0.4f), 0.06f, 0.008);
TEST_ABS_REL(bw_tanf_3(-0.5f), tanf(-0.5f), 0.06f, 0.008);
TEST_ABS_REL(bw_tanf_3(-0.6f), tanf(-0.6f), 0.06f, 0.008);
TEST_ABS_REL(bw_tanf_3(-0.7f), tanf(-0.7f), 0.06f, 0.008);
TEST_ABS_REL(bw_tanf_3(-0.8f), tanf(-0.8f), 0.06f, 0.008);
TEST_ABS_REL(bw_tanf_3(-0.9f), tanf(-0.9f), 0.06f, 0.008);
TEST_ABS_REL(bw_tanf_3(-1.0f), tanf(-1.0f), 0.06f, 0.008);
TEST_ABS_REL(bw_tanf_3(-1.1f), tanf(-1.1f), 0.06f, 0.008);
TEST_ABS_REL(bw_tanf_3(-1.2f), tanf(-1.2f), 0.06f, 0.008);
TEST_ABS_REL(bw_tanf_3(-1.3f), tanf(-1.3f), 0.06f, 0.008);
TEST_ABS_REL(bw_tanf_3(-1.4f), tanf(-1.4f), 0.06f, 0.008);
TEST_ABS_REL(bw_tanf_3(-1.5f), tanf(-1.5f), 0.06f, 0.008);
TEST_ABS_REL(bw_tanf_3(-1.56f), tanf(-1.56f), 0.06f, 0.008);
TEST_ABS_REL(bw_tanf_3(-5.678f), tanf(-5.678f), 0.06f, 0.008);
TEST_ABS_REL(bw_tanf_3(-56.78f), tanf(-56.78f), 0.06f, 0.008);
TEST_ABS_REL(bw_tanf_3(-567.8f), tanf(-567.8f), 0.06f, 0.008);
TEST_ABS_REL(bw_tanf_3(-5678.f), tanf(-5678.f), 0.06f, 0.008);
printf("\nsuceeded: %d, failed: %d\n\n", n_ok, n_ko);