2003-09-09 10:10 PM
float multiplication under Cosmic
2003-09-08 08:11 AM
Hi,
Im using the C Cosmic Compiler. my application uses a float type variable, and i need to multiply it by another float value: float a; a = a*1.1; when i compiled it, i found out that it took more than 200bytes in the program memory(only the multiplication line!!) - does anyone know what can i do in order to get a smaller application? (i have more that 1 multiplication operator in my app... and only 1.5k of memory) Thanks Itamar2003-09-09 02:54 PM
Itamar,
For float variables you could use integer maths by ''scaling'' them, i.e. multiply by 10 or 100 or 1000 or some variable constant and then divide by a constant to get final answer. For example: (47.01 * 100) * (.05 * 100) = 23,505 then divide by 10000. I heard it is suppose to be shorter, but not tried it. Good luck, DaveF2003-09-09 02:55 PM
Itamar,
For float variables you could use integer maths by ''scaling'' them, i.e. multiply by 10 or 100 or 1000 or some variable constant and then divide by a constant to get final answer. For example: (47.01 * 100) * (.05 * 100) = 23,505 then divide by 10000. I heard it is suppose to be shorter, but not tried it. Good luck, DaveF2003-09-09 10:10 PM
Hi,
Usually float are not used on 8bit micros and are reserved for DSPs as the code generated from the library to handle them is way to huge. They are provided mostly as it is part of the ANSI C. The most efficient way is to use fractional numbers as you can approximate any real number between 0 and 1 with a good precision using integer fraction with not very big integer (below 20 for example) . Ex: 0.555 = 5/9 By scaling your equations end results you can have very efficient algorithm using only integers. The cost will be more thinking in the coding phase. Good work.