Modulo nachprogrammieren

Seite 1 von 2 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/modulo_nachprogrammieren_136589/page_1 - zur Vollversion wechseln!


sliver33 schrieb am 11.02.2005 um 16:18

Müsste die Modulo funktion für negative Fließkommazahlen nachprogrammieren.
Weiß zufällig wer wie das geht? ... Für positive Ganzzahlen is ja einfach aber wei schauts mit negativen Zahlen aus?

tia
Sliver


xdfk schrieb am 11.02.2005 um 19:46

modulo fuer flieszkommazahlen? in assembler oder wo liegt das problem? negativ oder positiv is modulo relativ egal wennst mich fragst.

zahl x durch y dividieren = erg(ganzzahlig)
x - erg * y = modulo

oder so aehnlich, hab weder zeit noch lust mir das genauer anzuschauen ;)

man nehme papier und bleistift und teste anhand einfacher beispiele


sliver33 schrieb am 11.02.2005 um 20:20

Oder man nimmt TI-89 und vergleicht das ergebnis mit dem ergebnis aus der rechnung x - erg*y = modulo.
Und das gilt leider nicht bei negativen fließkomma zahlen.

Ich brauchs übrigens in JAVA (J2ME) und da gibts leider keine Fließkommazahlen. ==> andere Klasse verwenden die hat aber leider keine modulo funktion ==> @#!?!


mat schrieb am 11.02.2005 um 21:04

Zitat
Ich brauchs übrigens in JAVA (J2ME) und da gibts leider keine Fließkommazahlen. ==> andere Klasse verwenden die hat aber leider keine modulo funktion ==> @#!?!
float mod = n1 % n2; :confused:

edit: j2me wofür?


smashIt schrieb am 11.02.2005 um 23:09

modulo is ja einfach nur der rest der division

float zaehler=..., nenner=..., ergebnis, modulo;
ergebnis=zaehler/nenner;
modulo=zaehler-nenner*(int)ergebnis;

oder alternativ
modulo=nenner*(ergebnis-(int)ergebnis);

sollten beide das selbe ausspucken wenn ich mich nicht irr...


xdfk schrieb am 12.02.2005 um 02:29

Zitat von sliver33
Oder man nimmt TI-89 und vergleicht das ergebnis mit dem ergebnis aus der rechnung x - erg*y = modulo.
Und das gilt leider nicht bei negativen fließkomma zahlen.

Ich brauchs übrigens in JAVA (J2ME) und da gibts leider keine Fließkommazahlen. ==> andere Klasse verwenden die hat aber leider keine modulo funktion ==> @#!?!

ich seh den wald vor lauter baeumen nicht:
wo liegt das problem?

(c++ bsp)
float x = -23.5;
float y = 10;
int tmp = x/y;
float result = x - y*tmp;
std::cout<<"result "<<result<<std::endl;

sollte imho das richtige ausgeben: -3,5

bzw was ist laut deinem taschenrechner das richtige ergebnis? und wenn du schon so toll sagen kannst dass es falsch ist WO genau liegt der fehler?

ich hab mich ehrlich gesagt noch nie mit negativen modulo operationen auseinandergesetzt deswegen check ich net ganz was du meinst,
maybe hast du das ganze nur falsch interpretiert?

weil das -3,5 % 10 kannst du klarerweise auch als 6,5 interpretieren.

um diese tageszeit in dem zustand is aber selbst so primitive mathematik nimmer das wahre ;)


xdfk schrieb am 12.02.2005 um 02:30

Zitat von mat
float mod = n1 % n2; :confused:

edit: j2me wofür?

wobei ich bin mal davon ausgegangen dass der lerneffekt darin liegen soll dass die kiddies den modulo operator selber ausprogrammieren ;)


sliver33 schrieb am 12.02.2005 um 11:22

Zitat von xdfk
wobei ich bin mal davon ausgegangen dass der lerneffekt darin liegen soll dass die kiddies den modulo operator selber ausprogrammieren ;)

Is keine Aufgabe fürs Studium sondern brauch ich selbst für ein Programm.

@mat: in J2ME (das is das für die Handys ;) ) gibts keine floats als Primitive Datentypen. Wenn man die trotzdem braucht muss man auf Klassen zurück greiffen die die ganze Berechnung mit ints lösen. Und dann schreibt man z.B.

Float a = new Float(2, -1); // 2*10^-1
Float b = new Float(3, -2);
a = a.Add(b);

Und mein Problem ist nun das ich nicht a.Mod() schreiben kann weil die Klasse die ich verwende keine Modulo Operation implementiert hat.

Back to topic:
Laut TI-85:
5%10: mod(5,10) = 5
23.5%10: mod(23.5,10) = 3.5
-23.5%10: mod(-23.5,10) = 6.5 <-----
-5%7: mod(-5,7) = 2

Was mich auf folgenden normalen Java code bringt:

public float mod(a, b) {
int tmp = a/b;

float m = Math.abs(a)-tmp*b;

if(a<0)
return b-m;
else
return m;
}

Hmmm ich glaub so müssts funktionieren. Was sagt ihr dazu?


xdfk schrieb am 12.02.2005 um 12:25

Zitat von sliver33
Back to topic:
Laut TI-85:
5%10: mod(5,10) = 5
23.5%10: mod(23.5,10) = 3.5
-23.5%10: mod(-23.5,10) = 6.5 <-----
-5%7: mod(-5,7) = 2

Was mich auf folgenden normalen Java code bringt:

public float mod(a, b) {
int tmp = a/b;

float m = Math.abs(a)-tmp*b;

if(a<0)
return b-m;
else
return m;
}

Hmmm ich glaub so müssts funktionieren. Was sagt ihr dazu?

ich kann dir jetzt zwar nicht sagen ob dein java code stimmt, musst du ausprobieren.
immerhin meine theorie scheint wenigstens richtig gewesen zu sein ;)


sliver33 schrieb am 12.02.2005 um 14:11

eigentlich nicht xdfk ... weil ja nicht -3.5 sondern 6.5 rauskommt

Java Code stimmt übrigens :). Hab grad a paar Tests gmacht für mich scheint des zu funktionieren :)


xdfk schrieb am 12.02.2005 um 14:36

Zitat von sliver33
eigentlich nicht xdfk ... weil ja nicht -3.5 sondern 6.5 rauskommt

Java Code stimmt übrigens :). Hab grad a paar Tests gmacht für mich scheint des zu funktionieren :)

muss ich jetzt meine diskrete math. unterlagen ausgraben um es dir zu beweisen? ;)


watchout schrieb am 12.02.2005 um 14:38

ähm sliver

ist dir schon mal der gedanke gekommen dass der TI nen Bug haben könnte?


xdfk schrieb am 12.02.2005 um 14:48

Zitat von watchout
ähm sliver

ist dir schon mal der gedanke gekommen dass der TI nen Bug haben könnte?

kein bug eher mehrere moegliche loesungen zu einem beispiel!

der TI zeigt eben nur eine davon an.

wie es wirklich mathematisch korrekt ist muesste ich nachlesen aber ich bin mir ziemlich sicher dass beides moeglich ist, wobei es dann sicher wieder davon abhaengt wo man nachliest.....


watchout schrieb am 12.02.2005 um 14:51

Zitat von xdfk
kein bug eher mehrere moegliche loesungen zu einem beispiel!

der TI zeigt eben nur eine davon an.
sicher? Glaub ich nämlich nicht, weil der TI einfach nach der Formel n-m*int(n/m) rechnet,ich kann da nichts sehen was mir mehrere ergebnisse liefert...


sliver33 schrieb am 12.02.2005 um 14:53

ähm ich glaub das ma dem TI schon vertrauen kann.

Aber nachdem ich was nachprogrammiert hab und jetzt immer das selbe rauskommt, passts für meine Fall und damit bin ich zufrieden.

@xdfk: Wenns nicht zu aufwändig ist würd mich des schon intressieren dast die math. unterlagen ausgrabst. Möchat wirklich wissen warums da zwei unterschiedliche Lösungen gibt.




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025