Add experiment testing the effects of adding extra bits to cordic
[ieee754fpu.git] / src / ieee754 / cordic / test / test_software.py
1 import math
2 import unittest
3 from python_sin_cos import run_cordic
4 import random
5
6 class SoftwareTestCase(unittest.TestCase):
7 def test_extrabits(self):
8 fracbits = 16
9 extrabits = 18
10 M = (1 << fracbits)
11 print(M)
12 for i in range(200000):
13 f = random.uniform(-math.pi/2, math.pi/2)
14 i = int(round(f * M))
15 f = i/M
16 print(f"int: {i}, float:{f}")
17 i = i * (1<<extrabits)
18
19 expected = int(round(math.sin(f) * M))
20
21 sin, cos = run_cordic(i,
22 fracbits=(fracbits+extrabits),
23 log=False)
24 sin = int(round(sin / (1<<extrabits)))
25
26 print(f"expected: {expected}, actual: {sin}")
27 self.assertEqual(expected, sin)
28
29
30 if __name__ == '__main__':
31 unittest.main()