www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik float + modulo


Autor: Rumpelstilzchen 123 (billson)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich habe eine frage, ist es möglich eine flaot variable mit einer modulo 
division zu verarbeiten?

ich meine zB:

float a,b;

a=b%100;

ist dies möglich? mein compiler beschwert sich in einer tour...
danke für eure hilfe!
mfg

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Rumpelstilzchen 123 (billson)

>ist dies möglich?

Nein.

> mein compiler beschwert sich in einer tour...

Das hat seine Gründe. Modulo ist nur für Integer definiert. Siehe 
Festkommaarithmetik.

MFG
Falk

Autor: Rumpelstilzchen 123 (billson)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke für deine schnelle antwort...
wie kann ich das umgehen?
ich bräucht nämlich den rest um die ganzen- und nachkommazahlen 
auszugeben?!?
emefge

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
da gibts sicherlich funtionen für, weiss im moment nur nicht welche 
(evtl trunc oder frac...)
im norfall macht ein dstrf und suchst im str das komma

Autor: P. S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
double Floatwert = Irgendwas;
uint32 Ganzzahl = Floatwert;
double Rest = Floatwert - Ganzzahl;

Evtl. noch ein paar Warnings wegcasten.

Autor: Rumpelstilzchen 123 (billson)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke für eure schnelle hilfe, ich denke so sollte es klappen!!
mfg

Autor: Jorge (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Modulo entspricht eigentlich dem Restanteil bei einer Division. 
Natürlich kann man sowas auch mit Fliesskomma machen es wurde oft als 
"fraction" auf Taschenrechnern bezeichnet. Wenn so eine Funktion in der 
Bibliothek nicht drin ist, kann man sie versuchen nachzubilden:

fraction:=floor(n/d)-(n/d) für positive und
fraction:=ceil(n/d)-(n/d) für negative Zahlen, so in etwa. Das Ergebnis 
ist aber nicht 100% genau und darin unterscheidet es sich vom Modulus.
Es gibt auch die "round" Funktion noch so ein Scherz.

http://de.wikipedia.org/wiki/Gaußklammer

Autor: ... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mensch Leute, stellt euch nicht so an! Dafür gibts in der 
Mathebibliothek eine Funktion:

double fmod( double x, double y );

Autor: Info (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://www.cplusplus.com/reference/cmath/fmod/

"Compute remainder of division
Returns the floating-point remainder of numer/denom (rounded towards 
zero):

fmod = numer - tquot * denom

Where tquot is the truncated (i.e., rounded towards zero) result of: 
numer/denom.

A similar function, remainder, returns the same but with the quotient 
rounded to the nearest integer (instead of truncated)."

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...
CONFORMING TO
       The functions remainder(), remainderf(), and remainderl() are 
specified in C99 and POSIX.1-2001.

       The function drem() is from 4.3BSD.  The float and long double 
variants dremf() and dreml()  exist  on  some  systems,
       such as Tru64 and glibc2.  Avoid the use of these functions in 
favor of remainder() etc.

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.