.. index:: floating-point .. _floating-point: .. Created floating-point.rst: Wed 14 Dec 2022 03:14:24 AEDT .. Full Path: /home/tp/mecrisp-unofficial-doc/floating-point.rst .. Author Copyright 2022 by t.j.porter .. Made by /home/tp/projects/scripts/makerst.sh -->/usr/local/bin/makerst .. license: MIT, please see COPYING Floating Point ============== .. image:: pics/floating-point.jpg Peter Schmidt ------------- https://www.spyr.ch/twiki/bin/view/MecrispCube/FloatingPointUnit A very interesting article by Peter Schmidt, author of :ref:`Mecrisp-Cube` where he uses the FPU of the STM32F407 and does various comparisons with Fixed Point (s31.32) and benchmarks the time involved. (excerpt from Peters article) **Floating-Point Unit** The STM32 ARM Cortex M4F MPUs (e.g. STM32WB, STM32F4, STM32L4) have a single precision floating-point unit. The STM32H7 MPUs have a double precision FPU (not supported yet). Also from STM AN4044 Floating-point calculations require a lot of resources, as for any operation between two numbers. For example, we need to: :: Align the two numbers (have them with the same exponent) Perform the operation Round out the result Code the result On an FPU-less processor, all these operations are done by software through the C compiler library (or Forth Words) and are not visible to the programmer; but the performances are very low. On a processor having an FPU, all of the operations are entirely done by hardware in a single cycle, for most of the instructions. The C (or Forth) compiler does not use its own floating-point library but directly generates FPU native instructions. When implementing a mathematical algorithm on a microprocessor having an FPU, the programmer does not have to choose between performance and development time. The FPU brings reliability allowing to use directly any generated code through a high level tool, such as MATLAB or Scilab, with the highest level of performance. Any integer with absolute value less than 2^24 can be exactly represented in the single-precision format, and any integer with absolute value less than 2^53 can be exactly represented in the double-precision format. ... **Conclusion** As long as you do only elementary arithmetic, fixed- and floating-point have comparable execution time (but division and multiplication is a magnitude slower). But for more elaborate calculation (trigonomteric, exponential functions) the execution time is for fixed-point at least two magnitudes slower. If time is not an issue in either development or execution, you can easily do without the FPU. .. seealso:: :ref:`Fixed Point`