Ich verstehe nicht, was bei folgendem Programm passiert. Da wo
random(10)-5 negativ wird, werden grosse positive Werte ausgegeben. Bei
allen auskommentierten Versionen ist das nicht der Fall. Für mich sind
die grossen positiven Werte nicht erklärbar, zumal es bei anderen
Schreibweisen keine Probleme gibt. Das ganze läuft auf nem teensy 36.
Hier das Programm zusammen mit der Ausgabe (weiter unten).
double x=random(10)-5.0f ;
liefert die richtigen (negativen) Werte. 5.0lf ist als Typ nicht
bekannt.
random liefert laut Dokumentation einen long Wert.
Der Doku nach ist der Returntyp von random() ein long.
Damit sollte das Ergebnis von random(10)-5 (long - int) auch ein long
sein, und damit auch negative Werte darstellen können, die dann nach
float umgewandelt werden.
Oliver
Martin O. schrieb:> double x=random(10)-5.0f ;>> liefert die richtigen (negativen) Werte. 5.0lf ist als Typ nicht> bekannt.
lf wäre 'long float', also double, aber wenn's mit f funktioniert...
> random liefert laut Dokumentation einen long Wert.
Dann sieht's danach aus, dass die Konvertierung von long nach double
nicht funktioniert für negative Zahlen.
Martin O. schrieb:> random liefert laut Dokumentation einen long Wert.
Das kann sein. In den Quellen (teensy3/WProgram.h) steht aber (mehrfach
überladen) was anderes:
Markus F. schrieb:> In den Quellen (teensy3/WProgram.h) steht aber (mehrfach> überladen) was anderes:> int32_t random(void);> uint32_t random(uint32_t howbig);> int32_t random(int32_t howsmall, int32_t howbig);>> Unser Kandidat geht also mit einem uint32_t um.
Tja, und da wundert sich einige, warum das Zeugs keiner ernst nimmt.
Oliver
Mit dem uint32_t wirds verständlich. Dass random einen long liefert habe
ich der Arduino Doku entnommen, denn angeblich ist Teensy zum Arduino
kompatibel. Stimmt wohl nicht so ganz.
Besten Dank!
Martin O. schrieb:> Dass random einen long liefert ...Martin O. schrieb:> Stimmt wohl nicht so ganz.
Stimmt wohl. Aber nur, wenn man's ohne (oder mit zwei) Parameter(n)
aufruft.
Dann kommt ein int32_t zurück und das ist beim Kinetis identisch zu
long.
Eric B. schrieb:> Martin O. schrieb:>> double x=random(10)-5.0f ;>>>> liefert die richtigen (negativen) Werte. 5.0lf ist als Typ nicht>> bekannt.>> lf wäre 'long float', also double, aber wenn's mit f funktioniert...
Man braucht ja nun auch nicht unbedingt einen double, um einen
ganzzahligen Wert im Bereich -5 bis 5 darzustellen.
Rolf M. schrieb:> Man braucht ja nun auch nicht unbedingt einen double, um einen> ganzzahligen Wert im Bereich -5 bis 5 darzustellen.
Stimmt, aber der TO wollte das so. Er schrieb ja:
> double x=random(10)-5 ;
Das ist schon klar. Ich bezog mich auf den Satz:
Eric B. schrieb:> lf wäre 'long float', also double, aber wenn's mit f funktioniert...
5.0f funktioniert bei diesem Wertebereich natürlich. Das lf bringt da
keinen Vorteil.