From: C. <bro...@gm...> - 2004-07-27 07:39:06
|
Hi! > I can build my own libraries > (.LIB) and link .REL files, but I would like to know what is the minimun to > add to build a math library with these two functions.=20 For using both asinf() and sqrtf() it seems you need at least the following files: sqrtf.c, asinf.c, asincosf.c, ldexpf.c, frexpf.c and of course math.h & errno.h, but luckily these usually don't increase the binary ;) You may save a few bytes if you omit asinf.c and call asincosf() directly with the second parameter made '0' (or '1' for cos). But then it'll be slower for the 'standard' values -1, 0 and 1. I suppose you should just copy the 4/5 .rel-Files suiting your platform and model to your project and link them with the rest. You may use the '#include <math.h>' statement (or however its written ;) ) as normal, just don't try to call any other function than sqrtf(), asincosf(), ldexpf(), frexpf() and (if included) asinf(). :) If you don't have the .rel-Files (usually in <sdcc-home>\device\lib\build\<machine-or-model\) you'll have to download the source distribution & compile them; but that's hopefully not neccessary. cu, Brogon |
From: Ryan B. <rya...@ya...> - 2004-07-28 07:31:44
Attachments:
float.c
float.peep
|
I've had difficulties with the floating point library as well. Besides its enormous size, I've noticed incorrect results when tested with random numbers (using a PC as reference). I've cobbled together a limited (non-optimized) floating point library in assembly. I tried to make it correct and reasonably small. It takes less than 1K of code and works only on the mcs51 in small model. It has a limited notion of infinity to avoid overflow randomness. It overrides the default __fsadd() __fssub() __fsmul() and various type conversion routines such as __uchar2fs(). It does not have __fsdiv() support. The transcendental functions (sin cos sqrt etc) are not implemented. These functions do a lot of adding and multiplying though, so using this library may help a bit. The overall size would probably still be large enough to exclude small model, in which case this is of no help. (Well maybe not -- I don't know about other models) I may also be doing some non-standard stuff with regards to rounding. I round the LSB up if the next-lower bit is 1 (instead of truncating). This happens even when converting a float to a long, so { long x = __fstoslong (-2.5); } would set x to -3; Ryan __________________________________ Do you Yahoo!? Yahoo! Mail - 50x more storage than other providers! http://promotions.yahoo.com/new_mail |
From: Pedro I. M. <pm...@fi...> - 2004-07-28 18:50:05
|
Dear Members, Thanks to all for the help; after some tests with the solutions proposed, I will use a lookup table for the ASINF() and I will work with the squared-distance (d^2) between to geographical points, so no need to use SQRTF(). Again, thanks for your time. best regards, Pedro Ignacio Martos > Dear Members, > > I am developing a small GIS application, and I need to use only the SQRTF() > and ASINF() functions. The hardware is an AT89S51 (4KB FLASH ROM),but if I > include the full math library, it uses near 3.5KB, so there is no room for > my program. I need to build a smaller math library (ideally with only these > two functions) but I do not know how to do it. I can build my own libraries > (.LIB) and link .REL files, but I would like to know what is the minimun to > add to build a math library with these two functions. Thanks in advance for > your help > > best regards, > Pedro Ignacio Martos > |