www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Umwandeln von dezimal in Single Precision Floating Point num


Autor: bjk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,
kann mir einer sagen wie ich von einer dezimalen Zahl eine Single
Precision  Floating Point Number machen will..
also soweit bin ich gekommen:

z,b 100.25

100 wird in Binär umgewandelt  -->1100100
0.25 wird in Binär umgewandelt -->010

beide zusammen
1100100.010

so jetzt kommt normlizieren..diesen teil verstehe ich nicht hier der
Format von Single Floating Point
_______________________________
s | Exponent |   Mantisse
_______________________________
31 30      23 22                0

kann mir einer helfen?

Gruss
Bjk

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Deine Frage weicht von der Überschrift ab; Du willst eine Fließkommazahl
einlesen: 100.25.
Das ist nicht mit einem Satz zu beantworten, wenn Du eine allgemeine
Lösung suchst und nicht speziell 401/4 wandeln willst. Am besten suchst
Du nach Quellcode der C-Funktion 'scanf', deren Aufgabe u.a. diese
Wandlung ist. Bei 'scanf' ist eine 'float-lib' Voraussetzung für
diese Wandlung.

Autor: Lidya (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe auch ein Problem mit Fließkommazahl umwandlung (ARM7 + NutOS).

Ich habe diese Funktionen :

/**
  *
  * \brief   Convert float value to unsigned int value
  *
  * \param   floatValue
  *
  * \returns integer representation of the float value
  *
  */
unsigned int COMToInt(float floatValue)
{
   float* pf = &floatValue;
   void* pv = (void*) pf;
   unsigned int uVal = (*((unsigned int*)pv));
   return uVal;
}

/**
  *
  * \brief   Convert unsigned int value to float
  *
  * \param   unsignedValue
  *
  * \returns float representation of the unsigned int value
  *
  */
float COMToFloat(unsigned int u)
{
   unsigned int* pu = &u;
   float fVal = (*((float*)pu));
   return fVal;
}

Ich denke 'float-lib' ist eine Voraussetzung für
diese Wandlung.
Aber ich weiss das nicht, wie kann ich das 'float-lib' in ARM7
benutzen.

Weiß jemand was da helfen könnte?

Autor: Lidya (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe auch ein Problem mit Fließkommazahl umwandlung (ARM7 + NutOS).

Ich habe diese Funktionen :

/**
  *
  * \brief   Convert float value to unsigned int value
  *
  * \param   floatValue
  *
  * \returns integer representation of the float value
  *
  */
unsigned int COMToInt(float floatValue)
{
   float* pf = &floatValue;
   void* pv = (void*) pf;
   unsigned int uVal = (*((unsigned int*)pv));
   return uVal;
}

/**
  *
  * \brief   Convert unsigned int value to float
  *
  * \param   unsignedValue
  *
  * \returns float representation of the unsigned int value
  *
  */
float COMToFloat(unsigned int u)
{
   unsigned int* pu = &u;
   float fVal = (*((float*)pu));
   return fVal;
}

Ich denke 'float-lib' ist eine Voraussetzung für
diese Wandlung.
Aber ich weiss das nicht, wie kann ich das 'float-lib' in ARM7
benutzen.

Weiß jemand was da helfen könnte?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Lidya (Gast)

>Ich habe auch ein Problem mit Fließkommazahl umwandlung (ARM7 + NutOS).

>Ich denke 'float-lib' ist eine Voraussetzung für diese Wandlung.

Nöö, aber für das Rechnen mit Floatzahlen. Je nach Compiler wird die 
schon automatisch verwendet oder man muss manuell dazulinken, über eine 
Compilereinstellung.

Aber das eigentliche "Problem" löst der Compiler ganz allein, ohne 
Funktion.
float my_float;
int my_int;

my_int = my_float;

Die Umwandlung macht er automatisch.

MFG
Falk

Autor: Lidya (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleich ich habe falsch erzählen.
Ich spreche über Indirection und nicht normalen Convertion.

Ich gebe hier ein Beispiel:

float a = 99.99;
unsigned int b = ToInt(a);

// So b= 0x42C7FAE1 ;
// Siehe http://www.h-schmidt.net/FloatApplet/IEEE754de.html

Später ich kann das genaue Float value kriegen:

unsigned int c = ToFloat(b);

// Da habe ich c = 99.99 wieder und nicht 100 oder 99.

Ich habe diese code in mein PC gesetet. Das funktioniert schon in PC 
aber
nicht in ARM7.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lidya wrote:

> Ich denke 'float-lib' ist eine Voraussetzung für
> diese Wandlung.

Nein. Ist es nicht.
Da wird nichts gewandelt (ausser dem Datentyp). Da wird
lediglich umgecastet. Die Binäre Darstellung bleibt aber
die gleiche.


Was hast du denn konkret für ein Problem? Gibt es eine
Fehlermeldung vom Compiler oder ein Laufzeitproblem?

Autor: Lidya (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also, kein Fehlermeldung von Compiler.
Das Problem ist, als ich ein floating point value mit das obengennante 
Funktionen umwandeln,
bekomme ich ein unerwartete Ergebniss.

Als Beispiel:
float a = 99.99;
unsigned int b = ToInt(a);

// So b= 0x42C7FAE1 aber das Ergebniss ist b =  0x00003BE8 ;

Die Funktionen funktioniert als ich sie im PC getestet. Aber, leider 
nicht in ARM7.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.