Seite 1 von 3
Modulo in Core?
Verfasst: 26. Juni 2007, 15:55
von toxonic
ich glaube das vor kurzem hier schon gelesen zu haben, aber ich hab's mit der suchfunktion net gefunden:
also echt, is bestimmt voll simple, aber ich versuche und versuche und finde keine lösung.... wie kann ich ein modulo wie in primary in core nachbauen?
danke i.v......
Verfasst: 26. Juni 2007, 17:22
von toxonic
boahhhhhhhhh....... sorry, hab mal wieder ne furchtbar lange leitung gehabt:
ich hatte probleme am div ausgang, die vorkommastelle zu berechnen.... einfach 0.5 abzuziehen und dann ne normale integer rundung zu machen, hab ich net geschnallt....
Verfasst: 26. Juni 2007, 18:08
von toxonic
ein problem gibt's noch, und zwar liegt das an dem "round" macro aus der rubrik "expert">"math":
modulinfo: "Rounds the incoming value to the nearest integer.
The result of rounding values exactly in between two integers is not defined. E.g. 1.5 could be rounded to 1 or to 2."
d.h. zum beispiel bei der division von 3:0.2, was ja einem quotient von 15 entsprricht, kommt bei mir laut meinem modulo 14,1 raus....
kann da jemand abhilfe schaffen?
ein weiteres problem ist die momentan mögliche division durch 0.... kann ich wahrscheinlich einfach mit einem vereinfachten separator bauen, denke ich....
modulo.jpg
Verfasst: 28. Juni 2007, 20:36
von krümelmonster
Hi toxonic,
da rate ich dringend zu einer anderen Lösung:
"/"->"integerator".
Den remainder erhältst Du natürlich Durch die Subtraktion dieses Ergebnisses vom Ursprungswert.
Den Integerator findest Du hier:
http://reaktor.approx.de/phpBB2/viewtopic.php?t=399
Die Division durch 0 darf natürlich nicht sein. Der Separator wäre schon o.k. - insofern ein Initialisierungsmoment für den Nenner ungleich 0 gewährleistet ist.
Das hier ist vielleicht ebenso für Dich interessant:
http://reaktor.approx.de/phpBB2/viewtopic.php?t=412
Viele Grüße, Gerald.
P.S.:Muß dringend endlich updaten. Will mir mal Deinen Pitcher anschauen.
Verfasst: 1. Juli 2007, 07:57
von krümelmonster
Hi,
funktioniert alles, oder ging mein Vorschlag in eine völlig verkehrte Richtung ?
BTW, wie bekommt Ihr eigentlich so einen hübschen Avatar hin ? Würde gerne was eleganteres als "user" dort stehen haben.
Viele Grüße, Gerald.
Verfasst: 3. Juli 2007, 17:23
von toxonic
hallo gerald!
sorry für die späte antwort, habe vor ein paar tagen schonmal reingeschaut und hatte da schon eine übergangslösung und den integerator habe ich in diesem zusammenhang noch nicht ganz verstanden, hab ihn aber auch noch nicht ausprobiert: so beim ersten hinschauen siehts mir so aus, als ob der integerator den integerwert "abrundet", wenn der fliesskomma wert kleiner ist als der integer wert. mein problem ist aber, das der integerwert i.d.r. bei fliesskomma werten von ...,5 nicht aufrundet (so wie ich das in der schule gelernt habe
) sondern meistens abrundet! ich habe mir momentan so beholfen, das ich ein macro eingebaut habe, dessen eingangs-fliesskomma wert mit seinem, per round-macro zur integer zahl umgewandelten wert subtrahiert wird. wenn nun das ergebnis genau 0,5 ist, wird dem eingangsfliesskommawert der wert 0.001 hinzuaddiert, wodurch das nächste rundungsmacro den wert auf jeden fall aufrundet! ist nicht sehr elegant, weil dabei auch 2 mal zwischen float und integer konvertiert wird, was cpu power kostet!
auch was die division durch 0 angeht, habe ich mir anders geholfen.... dazu noch eine frage: was genau ist eigentlich bei der division durch 0 so tragisch? geht es da nur um den ergebniswert, mit dem man nichts anfangen kann oder ist das gar ein extremer aufwand für die cpu oder bringt gar maschienen anderer architektur als intel möglicherweise zum absturz oder wie auch immer? also, meine maschiene macht der erstmal keine mucken, is nur eben ein unbrauchbarer wert - deswegen frage ich!
was den spruch angeht: musst fix mal 100 beiträge insgesamt geschrieben haben und schon bist du ein meister....
Verfasst: 4. Juli 2007, 10:15
von krümelmonster
Hi toxonic,
hmmmh, ich denke mir dazu Folgendes:
Bei einer modulo-Operation ist es Dir doch egal, ob der beispielsweise Nenner 5-mal in den Zähler paßt oder 5,1-mal oder 5,6-mal.
Letztendlich zählt hier nur die 5. 5,6 würde in Reaktor aber bereits aufgerundet, was zu einem Fehler führt.
Läßt Du nach der Division die Nachkommastellen entfernen ( das ist der Sinn des integerators; speise beide Eingänge mit dem Fließkommasignal - das .49/.5-Problem wird so umgangen ), müßte doch ein korrektes Ergebnis entstehen, denk ich mir ...; multiplizierst Du anschließend wieder mit dem Zähler und subtrahierst dieses Ergebnis vom Ursprungswert, so ergibt sich der richtige remainder.
Die Idee, nach der Division zunächst 0.5 abzuziehen, hilft zumindest nicht für den Fall, daß die Division ein glattes .0-Ergebnis liefert, die Subtraktion somit ein .5-Ergebnis, das unter Umständen wieder abgerundet wird. Der Trick mit +0.0001 im Falle des Nachkommawertes=0.5 hilft da bestimmt schon, nur hast Du dann wieder einen Router drin, dazu 2 float<->int conversions, das dürfte ein klein wenig teurer werden (aber auch wirklich nur ein klein wenig).
Schön auf jeden Fall zu sehen, daß es da eine weitere Möglichkeit gibt, der .49/.5-Problematik zu entgehen. Bislang hielt ich meine für die einzige.
Was die Division durch 0 anbelangt, hat sich bei mir folgender Eindruck eingestellt: Einmal inf, immer inf ! Aber offensichtlich liege ich auch da nicht richtig.
Zum Spruch: Ich hatte da für mich eher an so etwas wie "Stiller Brüter" gedacht.
Viele Grüße, Gerald.
Verfasst: 5. Juli 2007, 15:25
von toxonic
so, habe das mit dem integerator mal ausprobiert, scheint mir in der tat ne gute lösung zu sein.... bloss ein problem hab ich noch: wenn an meinem modulo jetzt am eingang A der wert 3 anliegt und an eingang B der wert 0.2 sollte das ergebnis glatt 15 sein.... dennoch scheint der router im integerator die "fliesskomma 15" als gerinerwertig anzusehen als die "integer 15", denn wieder kommt am div ausgang der wert 14 heraus und beim mod ausgang der wert -1! ich hab daraufhin mal die "fliesskomma 15" mit 10 multipliziert, dann in eine integerzahl verwandelt und anschliessen nochmal durch 10 dividiert und siehe da, plötzlich ist "fliesskomma 15" nichtmwhr kleiner als die integer zahl! aüsserst strange, wie ich finde..... hat da jemand eine erklärung für dieses phänomen?
Namenlos.jpg
Die Idee, nach der Division zunächst 0.5 abzuziehen, hilft zumindest nicht für den Fall, daß die Division ein glattes .0-Ergebnis liefert, die Subtraktion somit ein .5-Ergebnis, das unter Umständen wieder abgerundet wird.
da hast du prinzipiell recht, aber meiner erfahrung nach wird immer nur aufgerundet, auch wenn in der modulreferenz steht, es sei in solchen fällen undefiniert!
Was die Division durch 0 anbelangt, hat sich bei mir folgender Eindruck eingestellt: Einmal inf, immer inf ! Aber offensichtlich liege ich auch da nicht richtig.
wie meinst du das? was für eine konkrete auswirkung haben INF's auf die maschine?
grüssli,
joe
Verfasst: 7. Juli 2007, 20:13
von helmsklamm
die division durch null ist mathematisch unzulässig und reaktor schreibt dir auch knallhart ne fünf ins klassenbuch: ein solches "ergebniss" klebt sich fest und bremst die komplette struktur aus. eigentlich hilft da nur audio aus/an oder neustart.
Verfasst: 8. Juli 2007, 13:13
von krümelmonster
o.k.;
von diesen speziellen Core-Merkwürdigkeiten kann man ja wirklich die Krätze kriegen !
Ein float-Wert von gleichem Betrag ist urplötzlich kleiner als der integer-Wert, na klasse.
Damit wärest Du auf jeden Fall schon mal modulo-Meister, gratuliere.
Ich selbst habe mein Macro bislang nur benutzt, um EINdeutige Rundungen, z. B. für Counter vorzunehmen.
Funktioniert problemlos. Weitere Nutzbarkeiten schienen völlig simpel zu sein. Und dann sowas !
Daß dies nicht die einzige Merkwürdigkeit in Core ist, weiß man ja mittlerweile.
Ich erinnere mich z.B. mit Grauen an
http://www.native-instruments.com/forum ... hp?t=36658
(ein, wie ich finde, wirklich schwerer Fehler).
Bleibt festzuhalten: Für modulo-Operationen NICHT GERRI´S INTEGERATOR verwenden !!!
Viele Grüße, Gerald.
helmsklamm hat geschrieben:division durch null ... eigentlich hilft da nur audio aus/an oder neustart.
Das meinte ich mit "einmal inf, immer inf". Maschinentechnisch wirklich erklären kann ich es aber auch nicht.
Verfasst: 14. Juli 2007, 21:53
von herw
krümelmonster hat geschrieben:...BTW, wie bekommt Ihr eigentlich so einen hübschen Avatar hin ? Würde gerne was eleganteres als "user" dort stehen haben.
Viele Grüße, Gerald.
* grins * indem Du einfach mal mehr Beiträge postest! Ab 50 gib's nen anderen und dann auch später mal (Überraschung!). Sogar helmsklammm hat noch nicht alle Grenzen erreicht.
ciao herw
Verfasst: 17. Juli 2007, 17:25
von herw
krümelmonster hat geschrieben:o.k.;
von diesen speziellen Core-Merkwürdigkeiten kann man ja wirklich die Krätze kriegen !
Ein float-Wert von gleichem Betrag ist urplötzlich kleiner als der integer-Wert, na klasse.
...
lieber krümelmonster, als PC-Experte mit Programmierkenntnissen solltest Du wissen, dass diese "Merkwürdigkeit" bei einer digital denkenden Maschine vom Prinzip her nicht vermeidbar ist
Da unsere geliebten "Dosen" und Macs nicht das Dezimalsystem als Grundlage haben sondern das Binärsystem, erscheinen dort abbrechende Bruch-Zahlen des Dezimalsystem (wie zum Beispiel 0,2) als periodische Zahl; somit werden nur endlich viele Stellen benutzt, also eine nicht exakte abbrechende Zahl.
Bei Bruchteilen wird nämlich auch mit digitalen Brüchen gearbeitet wie zum Beispiel 1/2, 1/4, 1/8, 1/16, 1/32 usw. Nun versuche 0,2 mal aus endlich vielen Dualbrüchen zusammenzusetzen.
Warum funktioniert es bei der Multiplikation mit 10? Besser ist es, beide Zahlen mit zehn zu multiplizieren, so dass es sich um wirklich ganze Zahlen handelt. Dann kann man den Integerator wieder benutzen.
Das Problem ist, dass man ja nicht weiß, wie viele Nachkommastellen der Divisor hat. Wenn man allerdings die Maximalzahl an Nachkommastellen kennt z.B. 4, dann muss man nur beide Zahlen mit 10000 multiplizieren und dann den Integerator anwenden.
ciao herw
PS: es gibt insgesamt bisher 14 Ränge, am Anfang in 100er Schritten. Danach geht es etwas grober weiter. Um den letzten Rang zu erreichen sind 5000 Beiträge nötig, also strengt Euch alle an
Verfasst: 21. Juli 2007, 00:17
von helmsklamm
warum ist eigentlich die multiplikation mit 1 erlaubt, und die divison mit 0 nicht?
X durch 0.5 ist das gleiche wie X mal 2. ebenso sind X durch 0.1 und X mal 10 identisch. ergo müsste X mal 1 das gleiche wie X durch 0 sein.
vielleicht bricht abstrakte mathe irgendwann bei erlaubniss dessen zusammen, aber warum hält sich reaktor an dieses diktum? gibt es theoretisch auch nur ne möglichkeit, module so zu verdarhten, das innerhalb "einer" rechenoperation bei nichtachten dieser regel alles andere unsinnig wird?
warum wird "durch 0" nicht einfach wie "mal 1" behandelt?
Verfasst: 21. Juli 2007, 07:43
von herw
helmsklamm hat geschrieben:warum ist eigentlich die multiplikation mit 1 erlaubt, und die divison mit 0 nicht?
X durch 0.5 ist das gleiche wie X mal 2. ebenso sind X durch 0.1 und X mal 10 identisch. ergo müsste X mal 1 das gleiche wie X durch 0 sein.
...
wie kommst Du denn zu diesem (Fehl-) Schluss?
ciao herw
Verfasst: 21. Juli 2007, 11:12
von helmsklamm
ups, X durch 0 wäre natürlich unendlich und nicht X.
wär aber trotzdem nicht schlecht, wenns im div-modul eine properties gäbe, die festlegt ab welcher nullkommastelle automatisch gefiltert würde. wäre bestimmt effektiver als der sonst nötige modulverhau falls bipolar.