PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RP6 Division funzt nicht.



RP5-System
23.09.2010, 22:02
Hallo,

Ich will in meien Programm ( Für RP6 ) eine Division machen, aber es geht nicht. ich bekomme immer 0 raus.
Das ergebnis müsste: 0.78515625 sein, bzw in meien fall 0.785.



uint16_t Data = 0; // Data muss int16_t sein.
float Ergebnis = 0; // Hab es mit double, double long, getestet.
void Test(void)
{
Data = ZYX; // YXZ = z.b. 804
Ergebnis = Data / 1024.0; // Hab es auch so 1024 getestet.
// Test Ausgabe
writeString_P(" Ausgabe: ");
writeIntegerLength(Ergebnis, DEC, 4);
writeChar('\n');
}


MFG Oliver G

radbruch
23.09.2010, 23:17
Hallo

writeIntegerLength(Ergebnis, DEC, 4); interpretiert das Ergebnis wieder als Integer. Fließpunktzahlen kannst du so nicht ausgeben. Stichwort wäre vielleicht float2string.

Ich versuche grundsätzlich nur ganze Zahlen zu verwenden. Wenn du nur die Ziffernfolge für z.B. eine Anzeige benötigst:

uint16_t Data = 0; // Data muss int16_t sein.
uint32_t Ergebnis = 0; // Ein longint mit 32 bit.
void Test(void)
{
Data = 804; // YXZ = z.b. 804
Ergebnis = 1000*Data / 1024; // Hab es auch so 1024 getestet.
// Test Ausgabe
writeString_P(" Ausgabe: 0,");
writeIntegerLength(Ergebnis, DEC, 4);
writeChar('\n');
} (ungetestet)

Gruß

mic

RP5-System
24.09.2010, 07:10
Hi radbruch,

Werd es auch so machen den ich hab die " FloatToString " funktion nicht gefunden. Wahrscheinlich muss man das sebst coden. Muss mal schaun ob der Programm speicher reicht.

Ja so wie in deine beispiel geht es nicht denn, die rechnung sollte so aus sehn:

10*Data / 1024 = (10*804 ) / 1024 = 7.8515625 ~ 7.85 Volt Akkuleistung
10*Data / 1024 = (10*874) / 1024 = 8.53515625 ~ 8.53 VoltAkkuleistung

Es sollte nur zu Optischen verschönerung bei der Displayausgabe sein.




(1000 * 804) / 1024 = 785.15625 ~ 785 Volt Akkuleistung.
Komma werde ich wenn es so funzt mittels for schleife und substring eine ( wenn >= 1024 ) dann zwei stellen danach reinquetschen.

PS: Wie kann man das Runden verhinder ich bekomm immer 8 raus wo 785 sein sollte.

MFG Oliver G