PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mathe in C, (division und acos..)



hosti
15.02.2010, 19:05
Guten Morgen,

Ich versuche schon den ganzen Abend zwei Variablen zu dividieren.
Wie folgt mein "Code"


float var1 = 156;
float var2 = 220;
float var3;

var3 = var1 / var2;
Meine Variable 3 ist aber leider immer 1
Auch wen ich var3 = ((float)var1 / (float)var2); schreibe.
ich lass mir den Inhalt auf einem display als int ausgeben. Ich sehe also nur wie ganzzahlig der Wert ist.
Komischerweise ist der wert 0 wen ich var2 / var1 rechne.
Ich verstehs echt nicht.

diesen wert rechne ich mit acos weiter und dann nochmals weiter in grad.
acos wird aber immer nur 1 übergeben... Mein Ergebniss in Grad ist immer 57 = 1 rad

Ich bin echt für jeden Tip dankbar

KingTobi
15.02.2010, 20:38
Hi

Hast du in der make die richtigen/nötigen Parameter gesetzt?

yaro
15.02.2010, 20:48
Versuch mal dies hier:
float var1 = 156;
float var2 = 220;
float var3;

var3 = var1 / var2;

if(var3 < 1) printf("Richtig")
else printf("Falsch")

Oder gib den Wert doch einfach als float aufm Display aus... (mit Hilfe von sprintf(...) )

Gruß, Yaro

hosti
16.02.2010, 17:11
hm, wieso habe ich die header stdio.h nicht? Ich benutze AVR studio und WinAVR.

Ich wollt mir jetzt mal die float ausgeben lassen

KingTobi
16.02.2010, 17:12
Alle Pfade richtig angegeben?

hosti
16.02.2010, 17:22
in welchem pfad sollte die den liegen?
io.h und co hab ich drin

chientech
16.02.2010, 18:52
Hi,
hast du dir die Werte im Simulator angeschaut oder woher weisst du, dass var3 == 1 ist?

gruß

hosti
16.02.2010, 19:01
Aha, nach neuinstallation ist stdlib.h wieder da.

Ich geb die Variable auf einem LCD aus. Aber als int.
Deshalb weiss ich nur obs >=0 ist.

Wie genau benutzt man sprintf?
char text[];
float zahl;
sprintf(text, "%f", zahl);

funktioniert nicht

KingTobi
16.02.2010, 19:09
Wenn du schreibst "funktioniert nicht" dann schreib immer was genau nicht funktioniert.

Ich hoffe dein Code sieht nciht wirklich so aus wie du ihn hier gepostet hast...
Außerdem gib für text mal ne Größe vor und gib zahl nen Wert.

hosti
16.02.2010, 19:17
Nein der sieht nicht ganz so aus, ging mir nur ums prinzip.

Ich hab mir mal ne funktion geschrieben um int-Werte auf dem Display auszugeben. Die habe ich versucht umzuschreiben.


void disp(float zahl1)
{
char text[17];

sprintf(text1, "%f", zahl1);
lcd funktionen(text1).....
}

Und ich bekomme ein unschönes error:
relocation truncated to fit: R_AVR_13_PCREL against symbol `__subsf3`definied in .text section in C:.............\libgcc.a(_addsub_sf.o)

und das 3mal (Leichte textliche abweichungen)

Und wenn ich sprintf auskommentiere ist es wieder fehlerfrei.

KingTobi
16.02.2010, 19:23
Bei dir ist irgendwas falsch eingestellt.
Benutzt du das AVRStudio?

hosti
16.02.2010, 19:25
aber das passiert mir nur mit sprintf()

und ich hab etlichezeilen code. Und gut 5 files.

Ja ich benutze AVR Studio und WinAVR

KingTobi
16.02.2010, 19:40
Bei mir läufts ohne Probleme, wie ich sagte, bei dir ist irgendwas falsch eingestellt.

KingTobi
16.02.2010, 19:48
Zu dem Fehler findet man wirklich viel im Internet, müsstest dir einfach mal selbst die Mühe machen...
z.B. http://www.mikrocontroller.net/topic/52855

hosti
20.02.2010, 11:47
Danke euch für eure Tipps.
entschuldige tobi, ich hab am abend die lösung noch gefunden und vergessen es zu posten.

Bei mir hat hinten und vorne was nicht gestummen.
Ich musste alles komplett deinstallieren und anschliessend neu installieren. Dann hat alles plötzlich genau so funktioniert wie es sollte.
Eine sehr komische Sache

trotzdem besten dank für eure Mühe