hilpers


  hilpers > comp.lang.* > comp.lang.java

 #1  
02.02.2007, 03:39
Sven Köhler
Hi,

wer weiss, wie das in der Regel umgesetzt wird?

Eingabe: Mantisse + Exponent als Integerzahlen (binär, zur Basis 2)
Ausgabe: String mit Floatingpointzahl zur Basis 10

Beispiel:

Mantisse: 1.110000 (= 7 / 4)
Exponent: 111011 (= -5)

Wenn ich mich nicht irre, dann spiegeln obige Angaben diese Zahl wieder:

5.4687500E-2 (= 7 / 4 / 2^5)


So!

Ich habe also jetzt die Mantisse (1110000 = 112 = 7*16) und den
Exponenten -5 als Integerzahl.

Wie errechne ich jetzt die Dezimalzahl - Stelle um Stelle?
Also wie wandle ich Mantisse+Exponent in einen String um?


Ich kann nicht auf irgendwelchen Java-Routinen zurückgreifen.
1. es geht um ein C++ Programm
2. Mantisse und Exponent sind repräsentiert durch arbitrary-precision
integer zahlen.


Grüße,
Sven
 #2  
04.02.2007, 18:19
wolfgang zeidler
Sven Köhler wrote:
> Hi,
> Eingabe: Mantisse + Exponent als Integerzahlen (binär, zur Basis 2)
> Ausgabe: String mit Floatingpointzahl zur Basis 10
> Beispiel:
> Mantisse: 1.110000 (= 7 / 4)
> Exponent: 111011 (= -5)
> Wenn ich mich nicht irre, dann spiegeln obige Angaben diese Zahl wieder:
> 5.4687500E-2 (= 7 / 4 / 2^5)
> Grüße,
> Sven


Vorschlag:

[1] Bin-Exp zu Bin-Float, also z.B.
1.11(b) x 2^-5 = 0.0000111(b) x 2^0 = 0.0000111(b)

[2] Bin zu Dec getrennt für Vor- und Nachkommateil, also z.B.
[2a] 0.(b) = 0.(d)
[2b] .0000111(b) = 0 x (1/2+1/4+1/8+1/16) + 1 x (1/32+1/64+1/128) =
= 1 x (4+2+1)/128 = 0.0546875(d)

[3] Dec-Float zu Dec-Exp, also z.B.
0.0546875 = 5.46875 x 10^-2

mfG, wz
 #3  
05.02.2007, 01:42
Sven Köhler
> Vorschlag:
>
> [1] Bin-Exp zu Bin-Float, also z.B.
> 1.11(b) x 2^-5 = 0.0000111(b) x 2^0 = 0.0000111(b)
>
> [2] Bin zu Dec getrennt für Vor- und Nachkommateil, also z.B.
> [2a] 0.(b) = 0.(d)
> [2b] .0000111(b) = 0 x (1/2+1/4+1/8+1/16) + 1 x (1/32+1/64+1/128) =
> = 1 x (4+2+1)/128 = 0.0546875(d)
>
> [3] Dec-Float zu Dec-Exp, also z.B.
> 0.0546875 = 5.46875 x 10^-2
>
> mfG, wz



Danke für deine Antwort.

Es geht mir aber nicht um das manuelle auswerten, sondern das Ausrechnen
der Floatingpoint-Dezimaldarstellung mit möglichst wenig Operation.

Rauskommen soll ein String - und ich gebe dabei nochmal zu bedenken,
dass meine Mantisse und der Exponent beliebig gross/klein werden können.
 #4  
05.02.2007, 12:59
Ingo Menger
On Feb 5, 2:42 am, Sven Köhler <remove-for-no-spam-skoeh>
wrote:

> Es geht mir aber nicht um das manuelle auswerten, sondern das Ausrechnen
> der Floatingpoint-Dezimaldarstellung mit möglichst wenig Operation.


Wo ist das Problem? Du hattest doch schon Mantisse und Exponent
getrennt: 112 und -5
Also ist die gesuchte Zahl 112 / 32.

> Rauskommen soll ein String - und ich gebe dabei nochmal zu bedenken,
> dass meine Mantisse und der Exponent beliebig gross/klein werden können.


Dazu mußt Du jetzt nur für Deinen Datentyp die ganz normale
Schuldivisionsregel umsetzen:
Also 112 / 32 = 3, Rest 16
Vor dem Komma steht also 3
Danach entwickelst Du den Dezimalbruch nach dem Komma:
16*10 / 32 = 5, Rest 0 (Glück gehabt!)
Ergebnis 3.5
Bei anderen Zahlen, die einen periodischen Dezimalbruch ergeben, wirst
Du ein Abbruchkriterium brauchen.
 #5  
06.02.2007, 20:22
wolfgang zeidler
Ingo Menger wrote:
> ....
> Bei anderen Zahlen, die einen periodischen Dezimalbruch ergeben, wirst
> Du ein Abbruchkriterium brauchen.


Der Fall sollte eigentlich nie eintreffen:
endliche Bin-Mantisse -> abbrechende Bin-Zahl -> abbrechende Dec-Zahl
( Hintergrund: { Primteiler von 2 } ist Teilmenge von
{ Primteiler von 10 } )

mfG, wz
 #6  
07.02.2007, 12:39
Ingo Menger
On Feb 6, 9:22 pm, wolfgang zeidler <this-mail-account-will-be-ignored-
by-w...@arcor.de> wrote:
> Ingo Menger wrote:
> > ....
> > Bei anderen Zahlen, die einen periodischen Dezimalbruch ergeben, wirst
> > Du ein Abbruchkriterium brauchen.

>
> Der Fall sollte eigentlich nie eintreffen:
> endliche Bin-Mantisse -> abbrechende Bin-Zahl -> abbrechende Dec-Zahl


Das stimmt. Es läuft ja aber darauf hinaus, daß er eine allgemeine
Funktion

String ratToString(Biginttype zähler, Biginttype nenner)

schreiben muß. Sein Problem wird daher zu einem subsummierten
Spezialfall des allgemeineren, in dem dann doch periodische
Dezimalzahlen vorkommen können.
Ähnliche Themen
eco basis

Hallo! Mir stellt sich folgende Frage: Wenn ich ein neues DECT-Telefon mit ECO-Modus kaufe und an dieser neuen Basisstation Mobilteile anmelde, die nicht diesen Modus...

Methoden zum Konvertieren zwischen Basis 10 und Basis 36

Hallo, ich muss Zahlen zwischen Basis 10 und Basis 36 (0-9, A-Z) hin und her konvertieren. Derzeit verwende ich selbstgeschriebene Methoden. Aber bringt das Framework...

Basis und duale Basis

Hallo, zu einer Basis b_i eines Vektorraums V laesst sich doch mit einer einfachen Vorschrift v_i(b_j)=delta_ij die duale Basis des Vektorraums V* bilden. Laesst sich das...

Wie dynamischen Datentraeger unter XP nach Basis wandeln?

Hi, eben habe ich meine neue 250 GB Platte (Samsung HA250JC) angeschlossen. In der Datentraegerverwaltung wird mir diese Platte allerdings als "dynamischer Datentraeger"...

gebrochener Exponent bei negativer Basis

Hallo! Ich erinnere mich an eine Regel, nach der gebrochene Exponenten bei negativen Basen - z.B. (-8)^(1/3) - nicht erlaubt sind. Ich habe aber vergessen, warum. Könntet...


Alle Zeitangaben in WEZ. Es ist jetzt 10:15 Uhr. | Privacy Policy