Found erroneous behavior in floating point calculations in openmv firmware when doing a performance calculation test.
A very simple procedure for calculating the number pi using the Leibniz formula, 10_000_000 iterations.
def calculate_pi(n):
t_sum = 0
for i in range(n):
term = (-1) ** i /(2*i+1)
t_sum = t_sum + term
return t_sum * 4
def performanceTest8():
iterations = 10000000
print("Calculate %i iterations PI Leibniz Formula" % iterations)
timet1 = utime.ticks_ms()
value = calculate_pi(iterations)
timet2 = utime.ticks_ms()
print(value)
print("Calculations time %u ms" %(timet2-timet1))
performanceTest8()
Got the following results:
OpenMV Cam H7 Plus (omv):
0.950764 !? !? !? !!!
Calculations time 48205 ms
Portenta H7 (omv)
0.950764 !? !? !? !!!
Calculations time 57519 ms
The same test on the version from Micropython.org (1.19.1):
Maix Amigo:
3.141597
Calculations time 121479 ms
PiPico:
3.141597
Calculations time 405259 ms
PyCom LoPy4(esp32):
3.141597
Calculations time 355002 ms
Nucleo-STM32F429ZI
3.141597
Calculations time 210003 ms
Nucleo-STM32H743ZI
3.141592553589793
Calculations time 86835 ms
PC Notebook:
3.1415925535897915
Calculations time 1990.820 ms
(tried different platforms Teensy 4.1, stm32, arduino etc - everything is fine)
All platform versions from OpenMV give an error, except for Arduino BLE33Sense (omv):
3.141597 !!!
Calculations time 517730 ms
Please fix it, otherwise there is an uncertain impression of the calculations.