| 1383 | }; |
| 1384 | |
| 1385 | AccuracyResult measure_sin() { |
| 1386 | AccuracyResult r = {}; |
| 1387 | const int N = 10; // Spot testing: 10 key points covers full cycle (was 100) |
| 1388 | const float lo = -6.2831853f; |
| 1389 | const float hi = 6.2831853f; |
| 1390 | float sumErr = 0; |
| 1391 | for (int i = 0; i < N; ++i) { |
| 1392 | float x = lo + (hi - lo) * i / (N - 1); |
| 1393 | float ref = fl::sinf(x); |
| 1394 | float got = s16x16::sin(s16x16(x)).to_float(); |
| 1395 | float err = fl::fabsf(got - ref); |
| 1396 | sumErr += err; |
| 1397 | if (err > r.maxErr) { r.maxErr = err; r.worstInput = x; } |
| 1398 | } |
| 1399 | r.avgErr = sumErr / N; |
| 1400 | r.nSamples = N; |
| 1401 | return r; |
| 1402 | } |
| 1403 | |
| 1404 | AccuracyResult measure_cos() { |
| 1405 | AccuracyResult r = {}; |