![]() |
32bit FixedPoint Math und multiplikation mit Kehrwert
Hallo
Wenn man bei einer berechnung mehrere Werte durch die Selbe Zahl teilen muss
Code:
Lässt sich das ganze ja durch multiplizieren mit dem Kehrwert beschleunigen
A/U
B/U C/U
Code:
Ok, bei Floatingpoint berechnungen kein Thema. Aber kann man soetwas auch bei FixedPointMath anwenden?
U = 1/U
A*U B*U C*U Wenn ich z.B eh nur im bereich +/- 30000 bin, kann ich die unteren 2 bytes für die "nachkomma" stellen nutzen. Ja ich weiß, dass sich heutzutage zwischen Fixed und Floatingpoint Math keine so große Lücke mehr auftut wie früher. Aber etwas das noch immer stresst ist Float->Int. Werde auch mal bei SSE gucken, da gibts ne möglichkeit mehrere werte aufeinmal zu Truncated/Rounden Trotzdem interressiert mich erstmal obige Fragestellung. MFG Memnarch |
AW: 32bit FixedPoint Math und multiplikation mit Kehrwert
Siehe zB
![]() ![]() |
AW: 32bit FixedPoint Math und multiplikation mit Kehrwert
Ähhmm ... ich verstehe grad nicht wo genau dein Problem ist.
Wenn du in einem 32bit integer eigentlich eine 16/16 bit Festkommazahl gespeichert hast und dann dividierst oder multipliziert, dann bekommst du doch das korrekte Ergebnis !? |
AW: 32bit FixedPoint Math und multiplikation mit Kehrwert
Wenn du zwei 32-bit Zahlen multiplizierst dann erhältst du ein 64-Bit Ergebnis.
Der gedachte Dezimalpunkt befindet sich genau in der Mitte; also muss man die oberen und unteren 16-Bit wegwerfen um dann wieder einen 32-Bit Festkommawert zu erhalten. Ich würde die Multiplikation mit nur positiven Zahlen durchführen und dann nachträglich das Vorzeichen korrigieren (Falls die Vorzeichen der Faktoren unterschiedlich war). |
AW: 32bit FixedPoint Math und multiplikation mit Kehrwert
@jfheins: ja für multiplikationen > 0.
aber mach mal FixedPointU = (1 shl 16) div FixpointU FixedPointA * FixedPointU das wird nicht funktionieren. Die zahl wird größer, nie kleiner. @shmia wie? einfach die mittigen 32bit rausschnibbeln und als ergebnis nutzen? |
AW: 32bit FixedPoint Math und multiplikation mit Kehrwert
Für 32-Bit-Arithmetik mit Maximalwerten <= 30000 wird
Delphi-Quellcode:
wird ersetzt durch
x div u
Delphi-Quellcode:
mit
x * invu shr 16
Delphi-Quellcode:
.
invu := $10000 div u
|
AW: 32bit FixedPoint Math und multiplikation mit Kehrwert
Zitat:
In dem Fall brauchst du ein 64bit Zwischenergebnis, aber dann klappt das auch ohne Probleme. |
AW: 32bit FixedPoint Math und multiplikation mit Kehrwert
@gammatester: ah danke, klappt :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz