From Sven-Ola Tuecke <sven-ola@gmx.de>: add support for fixedpoint math
authorHannes Gredler <hannes@gredler.at>
Thu, 14 Feb 2008 08:56:01 +0000 (09:56 +0100)
committerHannes Gredler <hannes@gredler.at>
Thu, 14 Feb 2008 08:56:01 +0000 (09:56 +0100)
commita2d1686b19ad272ae6a8eedbbc12ecb9173db2bf
treea717214ac0476c4f49bc61c6b60f43006c1c8809
parent0e7587e66034b78e21064dcf7693c60a06a63401
From Sven-Ola Tuecke <sven-ola@gmx.de>: add support for fixedpoint math
Fixed point math replaces floating point calculations by integer counterparts.
The 20 higher bits of a typical 32 bit hold the digits before the decimal
point > 1.0, the lower 12 bits hold the digits after the decimal point. An
old trick, e.g. used in gaming to speed up calculations, because long (+-*/)
long is always faster than float (+-*/). Of course, all calculations and
automatic number conversions have to be found and adpated.
To help in debugging, added and #ifdef USE_FPM to toggle betwenn FPM and
normal maths. One can remove that at a later stage if we are sure it works
correct. For this, I added CPPFLAGS+=USE_FPM to the central Makefile.inc.
Also critical: When using 20+12 bits, one have to check for overflows and
underflows. This is done by a number of assert() statements active only if
you compile with "make DEBUG=1". The olsrd compiled in this way will of
course save no CPU cycles.
27 files changed:
Makefile.inc
lib/bmf/src/NetworkInterfaces.c
lib/dot_draw/src/olsrd_dot_draw.c
lib/httpinfo/src/olsrd_httpinfo.c
lib/nameservice/src/mapwrite.c
lib/nameservice/src/nameservice.c
lib/tas/src/plugin.c
lib/txtinfo/src/olsrd_txtinfo.c
src/fpm.c [new file with mode: 0644]
src/fpm.h [new file with mode: 0644]
src/hysteresis.c
src/hysteresis.h
src/link_set.c
src/link_set.h
src/lq_mpr.c
src/lq_packet.c
src/lq_packet.h
src/lq_route.c
src/lq_route.h
src/packet.h
src/process_package.c
src/routing_table.c
src/routing_table.h
src/tc_set.c
src/tc_set.h
src/two_hop_neighbor_table.c
src/two_hop_neighbor_table.h