float -> integer FP precision
Verfasst: 10. April 2013, 23:49
hi!
Ich bin gerade (schon sehr lange) an einem Mammutprojekt bei dem ich jetzt versuche einige (schon funktionierende) Teilbereiche soweit zu kriegen dass sie in einem Subroutinen Kontext allgemein funktionstüchtig sind. Das Ziel ist eine komplette Grafiklibrary für Reaktor core zu erstellen. Das schöne ist, dass das Grundsystem (Iterationsalgo, dynamische Speicherzuweisung usw) mit allen Anforderungen nun funktioniert. Grundlage des ganzen ist die Regel, dass alles auf wenigstmögliche Funtionsgruppen zu reduzieren. So wird ein system mit bspw. 10 Fadern den gleichen umfang haben wie eines mit 1000.
Dazu musss natürlich jeder einzelne Fader anhand eines Datensatzes beschrieben werden. In diesem Datensatz sind Eigenschaften festgehalten wie Koordinaten, Erscheinungsbild und Wertebereich. Das Problem das ich hier veranschaulichen will muss ich lösen um die neue Version meiner Wertebereichsfestlegung zu verwirklichen. Dazu muss noch gesagt werden, dass diese Datensätze komplett Integer gehalten werden da sie fast vollständig mit BIT operationen Codiert werden. Gerade bei der Koordinatenberechnung des Grafischen outputs spart mir das immens viel code. Ferner wird dieser Speicher auch über Primary versendet um eine Funktionalität für zukünftige Versionen des systems zu ermöglichen: Der User malt sich mit der Maus die Bedienelemente die er gerade haben will. Aber das ist noch in weiter Ferne. Displayseitig funktioniert das schon problemlos aber im Audiopart stehen da noch einige Versuche aus. Das ganze system werde ich in einem "projekt" Thread mal vorstellen, dazu will ich aber die neue Version meines Datensatzes erst implementiert haben.
Wertebereich eines Faders:
bisherige Version:
rmx = realer maximalwert
mx = maximalwert des Integerspeichers
rmx bestimmte so den wertebereich und mx die stepsize
stepsize = rmx/mx
beispiel
rmx = 130 (filter cutoff)
mx = 1300
stepsize 0.1
so ging der Wertebereich immer von 0 - Max
ein weiteres BIT konnte dann das ganze noch 2 polig machen.
Beispiel
2pol?=1
rmx = 2
mx = 2000
Wertebereich von -1 bis 1 Stepsize 0.001
das klappt sauber und ich muss sagen das das ziemlich Prazisorientiert ist für 90%(?) aller Fälle. Doch wie einen Wertebereich von -3.5 bis 5 Beschreiben was ja mit den Standartbedienelementen von Reaktor möglich ist? Und dazu folgende mir wichtige Frage (die aber immernochnichts mit der eigentlichen Problematik zu tun hat.):
dazu noch: es geht hier um den Tatsächlichen Wertebereich der in der corezelle am ende ankommen soll und mit dem gerechnet werden soll. da ich diesen auch in der Grafikausgabe brauche (Realwertinformation) soll eine Standartisierung der Wertebereiche nicht erfolgen. (ich hoffe nicht dass mich jemand deswegen ausschimpft )
FRAGE:
Wie oft ist es euch passiert, dass ihr ein Bedienelement gebraucht habt welches nicht ganzzahlige min und maxwerte hat?
Wie oft ist es euch passiert, dass ihr ein bipolares Bedienelement gebraucht habt dessen min und maxwerte nicht den gleichen Betrag |x| haben?
wenn jetzt zB Herwig sagt: sogut wie nie! dann würd ich mir echt überlegen mein altes system zu behalten weil es sehr codearm ist.
und jetzt hab ich soviel geschrieben und es ist auch schon so spät, dass ich mit dem eigentlichen Problem erst morgen oder übermorgen anfange
also die Thread wird dem Titel noch nicht ganz gerecht aber das wird... antwort auf beide oberen Fragen wäre sehr gerngesehen
gruss D
Ich bin gerade (schon sehr lange) an einem Mammutprojekt bei dem ich jetzt versuche einige (schon funktionierende) Teilbereiche soweit zu kriegen dass sie in einem Subroutinen Kontext allgemein funktionstüchtig sind. Das Ziel ist eine komplette Grafiklibrary für Reaktor core zu erstellen. Das schöne ist, dass das Grundsystem (Iterationsalgo, dynamische Speicherzuweisung usw) mit allen Anforderungen nun funktioniert. Grundlage des ganzen ist die Regel, dass alles auf wenigstmögliche Funtionsgruppen zu reduzieren. So wird ein system mit bspw. 10 Fadern den gleichen umfang haben wie eines mit 1000.
Dazu musss natürlich jeder einzelne Fader anhand eines Datensatzes beschrieben werden. In diesem Datensatz sind Eigenschaften festgehalten wie Koordinaten, Erscheinungsbild und Wertebereich. Das Problem das ich hier veranschaulichen will muss ich lösen um die neue Version meiner Wertebereichsfestlegung zu verwirklichen. Dazu muss noch gesagt werden, dass diese Datensätze komplett Integer gehalten werden da sie fast vollständig mit BIT operationen Codiert werden. Gerade bei der Koordinatenberechnung des Grafischen outputs spart mir das immens viel code. Ferner wird dieser Speicher auch über Primary versendet um eine Funktionalität für zukünftige Versionen des systems zu ermöglichen: Der User malt sich mit der Maus die Bedienelemente die er gerade haben will. Aber das ist noch in weiter Ferne. Displayseitig funktioniert das schon problemlos aber im Audiopart stehen da noch einige Versuche aus. Das ganze system werde ich in einem "projekt" Thread mal vorstellen, dazu will ich aber die neue Version meines Datensatzes erst implementiert haben.
Wertebereich eines Faders:
bisherige Version:
rmx = realer maximalwert
mx = maximalwert des Integerspeichers
rmx bestimmte so den wertebereich und mx die stepsize
stepsize = rmx/mx
beispiel
rmx = 130 (filter cutoff)
mx = 1300
stepsize 0.1
so ging der Wertebereich immer von 0 - Max
ein weiteres BIT konnte dann das ganze noch 2 polig machen.
Beispiel
2pol?=1
rmx = 2
mx = 2000
Wertebereich von -1 bis 1 Stepsize 0.001
das klappt sauber und ich muss sagen das das ziemlich Prazisorientiert ist für 90%(?) aller Fälle. Doch wie einen Wertebereich von -3.5 bis 5 Beschreiben was ja mit den Standartbedienelementen von Reaktor möglich ist? Und dazu folgende mir wichtige Frage (die aber immernochnichts mit der eigentlichen Problematik zu tun hat.):
dazu noch: es geht hier um den Tatsächlichen Wertebereich der in der corezelle am ende ankommen soll und mit dem gerechnet werden soll. da ich diesen auch in der Grafikausgabe brauche (Realwertinformation) soll eine Standartisierung der Wertebereiche nicht erfolgen. (ich hoffe nicht dass mich jemand deswegen ausschimpft )
FRAGE:
Wie oft ist es euch passiert, dass ihr ein Bedienelement gebraucht habt welches nicht ganzzahlige min und maxwerte hat?
Wie oft ist es euch passiert, dass ihr ein bipolares Bedienelement gebraucht habt dessen min und maxwerte nicht den gleichen Betrag |x| haben?
wenn jetzt zB Herwig sagt: sogut wie nie! dann würd ich mir echt überlegen mein altes system zu behalten weil es sehr codearm ist.
und jetzt hab ich soviel geschrieben und es ist auch schon so spät, dass ich mit dem eigentlichen Problem erst morgen oder übermorgen anfange
also die Thread wird dem Titel noch nicht ganz gerecht aber das wird... antwort auf beide oberen Fragen wäre sehr gerngesehen
gruss D