| 1421 | } |
| 1422 | |
| 1423 | AccuracyResult measure_atan() { |
| 1424 | AccuracyResult r = {}; |
| 1425 | const int N = 10; // Spot testing: 10 key points adequate for range coverage (was 50) |
| 1426 | const float lo = -8.0f; |
| 1427 | const float hi = 8.0f; |
| 1428 | float sumErr = 0; |
| 1429 | for (int i = 0; i < N; ++i) { |
| 1430 | float x = lo + (hi - lo) * i / (N - 1); |
| 1431 | float ref = fl::atanf(x); |
| 1432 | float got = s16x16::atan(s16x16(x)).to_float(); |
| 1433 | float err = fl::fabsf(got - ref); |
| 1434 | sumErr += err; |
| 1435 | if (err > r.maxErr) { r.maxErr = err; r.worstInput = x; } |
| 1436 | } |
| 1437 | r.avgErr = sumErr / N; |
| 1438 | r.nSamples = N; |
| 1439 | return r; |
| 1440 | } |
| 1441 | |
| 1442 | AccuracyResult measure_atan2() { |
| 1443 | AccuracyResult r = {}; |