linux-l: OT: Ungenauigkeiten

Siegfried Pohl spohl at bert.in-berlin.de
Mo Aug 7 13:24:54 CEST 2000


*Jens-Uwe Morawski <morawski at gmx.net> wrote:
> > - Little- und Big Endian
> 
> Sorry, aber was bedeutet das?

Das definiert die Reihenfolge, unter der im Speicher innerhalb eines
zum Beispiel Word (also 16 Bit = 2 Byte) das least- und most-significant
Byte abgelegt wird. Beispiel: Eine 16 Bit Maschine speichert an Adresse
100 (zur Vereinfachung im Dekadischen System) den Wert 25 (die Zahl
fuenf und zwanzig), das bedeutet, dass einmal der Wert "Zwei", also
binaer 0010 und einmal der Wert "Fuenf" (0101) abgespeichert wird, da
der Hauptspeicher eines Computers immer in Byte gerechnet und auch auch
in 1-Byte Schritten adressiert wird, gibt es jetzt zwei Moeglichkeiten. 
Einmal, dass unter Adresse 100 die Zwei gespeichert wird und unter Adresse
101 die Fuenf oder umgekehrt. Das wird durch die Bezeichnung Little- und
Big-Endian ausgedrueckt. 
Besonders spaszig ist das, wenn man ein
Int (also 8 Bytes) gespeichert hat, und moechte auf zum Beispiel 
gerade oder ungerade testen, dann braucht man eigentlich zur zu
Pruefen, ob das LSB (least sig. bit) gerade oder ungerade ist 
(irgendetwas in der Richtung 

if(*((char)(&(Variable))) % 2) return True; blabla)

wenn man dann, die Differenzierung Little- und Big-Endian nicht 
eingebaut hat, gute Nacht. 

Es gibt aber, glaube ich, einen System Aufruf, der auf Little- und
Big-Endian prueft. Das kann man in den Kernel-Quellen schauen.


> 
> > - installiere doch in der Uni mal den GNU Compiler, da verschiedene
> >   Compiler verschiedene Algorithmen implementieren, um dasselbe Resultat
> >   zu erreichen
> Ich glaube das kann ich meinem SysAdmin nicht klar machen!

Wer ist fuer wen da? Der SysAdmin fuer dich oder umgekehrt?

> 
> > - Setze doch mal die Gleitkommagenauigkeit _unter_ den hoechstmoeglichen
> >   Wert, also verwende mal floats auf beiden Maschinen, das muesste doch
> >   eigentlich dazu fuehren, dass die Rundungsfehler auf beiden Maschinen
> >   dieselben sind (das Problem ist aber trotzdem, dass _intern_ mit
> >   long double gerechnet wird...)
> Sind das Compiler-Optionen? Ich habe irgendwie keinen Plan, sorry.

Es gibt bestimmte Mathematische Libraries, wo man genau einstellen kann, 
bis auf welche Stellenzahl genau gerechnet werden soll. Dein 
Problem stellt sich mir so dar, dass intern die beiden Maschinen 
eine unterschiedliche Genauigkeit verwenden, und daher die
Akkumulation der Rundungsfehler verschieden ist, wenn es sich um so 
eine Geschichte, wie die deine handelt, solltest du auch nicht die
Standard C-Bibliothek nehmen, sondern eine spezifische mathematische.
Gehe doch mal zum FB Mathematik und unterhalte dich mal mit einem
Experten ueber Computer Algebra Systeme, die kennen dein Problem 
bestimmt.

Mit freundlichen Gruessen, Siggi


-- 
| Siegfried Pohl <spohl at bert.IN-Berlin.DE> | HTTP://ME.IN-Berlin.DE/~bert
| Tel: +49-30-33506700  Fax: +49-30-33506701
| -> I do realize VMS had some cool features [...] But I never 
| -> used file versions myself, preferring (in true Unix fashion) 
| -> to shoot myself in the foot every now and then. (C) P. Samuelson



Mehr Informationen über die Mailingliste linux-l