Konvertierung von floating-point 32-bit-fixed point in Java
Habe ich zum konvertieren einer Gleitkommazahl in 32-bit-fixed point in Java .
Nicht in der Lage zu verstehen, was ein 32-bit-fixed-point ?
Kann jeder Körper helfen, mit Algorithmus ?
- Java kann nicht Typumwandlung? :O
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einer Festkomma-Zahl ist eine Darstellung einer reellen Zahl mit einer bestimmten Anzahl von bits eines Typs, für den integer-Teil und die restlichen bits des Typs für den gebrochenen Teil. Die Anzahl der bits, die jeder Teil ist fest (daher der name, fixed-point). Ein integer-Typ ist in der Regel verwendet, um zu speichern Festkomma-Werte.
Fixed-point zahlen werden normalerweise in Systemen verwendet, die keine floating-point-Unterstützung, oder brauchen Sie mehr Geschwindigkeit als floating point bieten kann. Fixed-point-Berechnungen können durchgeführt werden, indem die CPU-integer-Anweisungen.
Einem 32-bit-fixed-point-Zahl, gespeichert in einem 32-bit-Typ, wie
int
.Normalerweise jedes bit in ein (unsigned in diesem Fall) der integer-Typ repräsentiert eine Ganzzahl mit dem Wert 2^n wie folgt:
Aber wenn der Typ zum speichern eines fixed-point-Wert, die bits werden interpretiert etwas anders:
Den festen Punkt Nummer im obigen Beispiel heißt eine 4.4 fixed-point-Zahl, da gibt es 4 bits für den ganzzahligen Teil und 4 bits in dem gebrochenen Teil der Zahl. In einem 32-bit-Typ der fixed-point-Wert wird normalerweise in 16.16-format, sondern auch sein könnte, 24.8, 28.4 oder jede andere Kombination.
Konvertierung von einem Gleitkomma-Wert eines fixed-point-Wert umfasst die folgenden Schritte:
Natürlich können Sie verlieren etwas an Präzision in den gebrochenen Teil der Zahl. Wenn die Genauigkeit der Nachkommastellen ist wichtig, die Wahl von fixed-point-format wiedergeben kann, die diese - zB. verwenden 16.16 oder 8.24 statt 24.8.
Negative Werte können ebenfalls behandelt werden in der gleichen Weise, wenn Sie Ihre Festnetz-Nummer zu unterzeichnen.
Wenn mein Java wurden stärker, ich würde versuchen, einige code, aber ich in der Regel schreiben, wie die Dinge in C, also werde ich nicht versuchen, eine Java-version. Außerdem Stapler's version sieht gut zu mir, mit der kleinen Ausnahme, dass Sie nicht bieten die Möglichkeit der Rundung. Er zeigt auch, wie Sie zum durchführen einer Multiplikation (shift ist wichtig!)
Ein sehr einfaches Beispiel für die Umwandlung von festen Punkt, es zeigt, wie zu konvertieren und multipliziert PI-by2. Die daraus resultierende konvertiert ist, zu verdoppeln, zu zeigen, dass die Mantisse nicht verloren, während die Berechnung mit ganzen zahlen.
Könnte man erweitern, der einfach mit sin() und cos () - lookup-Tabellen etc.
Ich würde empfehlen, wenn Sie planen, einen festen Punkt zu suchen, um ein java-fixed point Bibliothek.
AUSGABE
double
zu festen Punkt; und überschreibentoString()
so eine korrekte interpretation der fixed-point-Wert gedruckt werden können, leicht (die könnte man dann benutzen Sie im test).Eines fixed-point-Typ ist einer, der hat eine Feste Anzahl von dezimal - /Binär-stellen nach dem radix-Punkt. Oder generell ein Typ, der speichern kann, die ein Vielfaches von 1/N für einige positive ganze Zahl N.
Intern, Festkomma-zahlen gespeichert werden, wie der Wert multipliziert mit dem Skalierungsfaktor. Beispielsweise 123.45 mit einem Skalierungsfaktor von 100 gespeichert ist, als wenn es die ganze Zahl 12345.
Konvertieren die internen Wert eines fixed-point Zahl floating point, teilen Sie einfach durch den Skalierungsfaktor. Zum konvertieren in die andere Richtung, multipliziert mit dem Skalierungsfaktor und auf die nächste Ganzzahl gerundet.
Die definition von 32-bit-fixed-point-variieren konnte. Die Allgemeine Idee der Feste Punkt ist, dass Sie haben einige Feste Anzahl von bits vor und eine andere Feste Anzahl von bits nach dem Komma (oder binäre Punkt). Für eine 32-bit-Version, die die meisten gemeinsamen split ist wohl auch (vor 16, 16), aber je nach Zweck, gibt es keine Garantie.
Soweit die Umwandlung geht, wieder ist es offen für Abwechslung-zum Beispiel, wenn die eingegebene Nummer außerhalb des Bereichs der Ziel -, möchten Sie vielleicht, um eine beliebige Anzahl von verschiedenen Dingen (z.B., in einigen Fällen rundum-könnte Sinn machen, aber in anderen, die Sättigung könnte werden bevorzugt).