Miniprogramm Rechner "für kleine Aufgaben" rundet kurios

Hinweis: In dem Thema Miniprogramm Rechner "für kleine Aufgaben" rundet kurios gibt es 19 Antworten auf 2 Seiten. Der letzte Beitrag () befindet sich auf der letzten Seite.
  • hm, das bedeutet eine Empfehlung für kcalc

    eindeutig ..
    Der aktuelle Plasma-Taschenrechner ist bei mir genau so fehlprogrammiert wie bei dir. Vielleicht bringt die nächste Ausgabe der KDE Applikations eine Verbesserung.
    ---------------
    ansonsten
    Taschenrechner › Wiki › ubuntuusers.de
    Wissenschaftlicher Taschenrechner – openSUSE
    Extcalc (kde3 aber tut)

    There's no place like 127.0.0.1

    Einmal editiert, zuletzt von wurzel99 ()

    Für den Inhalt des Beitrages 101480 haftet ausdrücklich der jeweilige Autor: wurzel99

  • ok, danke zusammen. Also nicht bei mir allein defekt. Eine Idee kam mir noch. kann es etwas mit 32 oder 64 bit zu tun haben (Genauigkeit von Fließkommazahlen)? ließe sich das überhaupt mischen?

    Für den Inhalt des Beitrages 101485 haftet ausdrücklich der jeweilige Autor: JeyF123

  • Es fängt damit an, dass ich nicht weiß wo diese Quellcodes zu finden sind; insofern bezweifle ich dass ich diese Korrektur selbst schaffe.

    Für den Inhalt des Beitrages 101505 haftet ausdrücklich der jeweilige Autor: JeyF123

  • Wenn du kein Programmierer bist ist es eh vergebliche Liebesmüh, nach den Sourcen zu suchen. Die zu finden ist übrigens nicht soo schwer.

  • Es ist eine Wissenschaft für sich, mit einem Rechner Zahlen darzustellen.
    Klingt komisch, ist aber so.


    Wenn wir die Zahl "3" durch Tastendruck auf die Taste über den Buchstaben "W" und "E" eingeben.
    Wir können sie aber auch auf dem Ziffernblock eingeben.


    In einer echten Konsole (z,.B. <strg><alt><f3>) kann man ganz gut sehen, was da tatsächlich geschaufelt wird:

    Code
    # mit -a aufgerufen, kann man showkey mit <strg><d> beenden.  -a meint ascii
    showkey -a
    # jetzt die Taste drücken, deren Codes man sehen möchte.
    
    
    # auch mal probieren
    # erfolgt 10Sek. keine Eingabe,beendet sich das Programm
    showkey -s
    showkey -k

    Der ganze Quatsch durchläuft einige Übersetzungen bis er endlich auf dem Bildschirm angezeigt werden kann.
    Aber der Rechner hat noch immer keinen Plan, dass das Bitmuster eine Zahl sein soll, mit der er gefälligst mathematisch korrekt zu rechnen hätte.


    Tatsächlich ist das schon eine relativ lesbare Darstellung.
    Denn auf Intelrechnern werden die Bytes umgekehrt gespeichert. Das nennt sich Little-Endian. Die Zahl 27 liegt also im Speicher als 72 vor. Das Gegenteil davon, Big-Endian, schreibt, wie wir es zu lesen gewohnt sind. Das nennt sich auch die Motorola Architektur, im Gegenteil zu falschen Intel-Architektur. Die hat aber den Vorteil, dass eine Rechenoperation einen Maschinentakt früher beginnen kann.
    Diese Probleme berücksichtigt aber schon die wohl am tiefgehenste Lib, die Linux kennt, die glibc. (Die Gnu Library für C routinen). Es gibt sogar Machinen, die dann Bi- Endian genannt werden, weil sie mit beiden Varianten umgehen können. Und natürlich gibt es auch noch ganz andere binäre Repräsentationen von Zahlen und Zeichen. Großrechner verwenden EBCDIC und ähnliche. Das ist eine ganze Wissenschaft für sich.


    Diese Probleme schlagen übrigens auch auf die Dateiformate voll durch. Was macht man mit einem Video auf verschiedenen Architekturen?
    Nun, die Formate werden exakt definiert. Und die jeweilige Zielplatform muss sie entsprechend "umrechnen".
    Ähnlich, wie bei Netzwerkübertragungen aller Arten: Auch dort werden Zeichen nicht so übertragen, wie sie die jeweilige Platform verwendet. Sie werden ALLE in ein streng definiertes Netzwerkformat hin- und her übersetzt.


    Wie jemand schon anmerkte, ist das aber nicht alles.
    Programme arbeiten IMMER in der Localen C. (das C meint die Programmiersprache C, in der es nur reines ASCII gibt. Alles andere machen bereits irgendwelche Routinen)
    Im englischen Sprachraum schreibt man z.B. 1,000,000.00 € für eine Million Euro. Im Deutschen 1.000.000,00€.
    Auch das will berücksichtigt werden.


    Aber es kommt natürlich noch schlimmer.
    Wir haben ja eher selten 1.000.000,00€, sondern sehr viel leichter -1.000.000,00€.


    Damit man mit all dem Zeugs wirklich sinnvoll rechnen kann, muss man es irgendwie vernünftig darstellen.
    Es haben sich dafür drei ziemlich verschiedene Formate entwickelt.
    Das eine sind Integer. Integer sind schlicht ganze Zahlen ( "natürliche Zahlen") also 1, 2, 3 und so weiter.
    Die treten sehr häufig auf und sind sehr, sehr schnell auszurechnen für Computer.
    Der Natur eines Rechners, der nun mal mit vielfachen von Bytes rechnet, haben diese Integer je nach Kontext und verwendeter Programmiersprache verschiedene Bereiche. Die tatsächliche Registerbreite in den Prozessoren selbst ist der Grund für die gewählten "Zahlenbreiten". Ein 32Bit Prozessor hat Register, die 32Bit groß sind, bei einem 64Bit Prozessor sind sie doppelt so breit.


    Und damit gibt es jede Menge von Randproblemen.
    (Die folgenden Darstellungen verwenden für binäre Zahlen die Zeichen "0" und "1" und trennen die Bytes mit zwei Punkten ".."
    Jedes Halbbyte (ein sogenannter Nibble) wird vom zweiten Teil durch "." getrennt.)
    Ein Byte hat 8 Bit
    Das ist binär 1111.1111 und dezimal 255 (geht also von 0 bis 255 jeweils einschliesslich, insgesamt 256) .
    Bei zwei Bytes haben wir 16 Bit
    1111.1111..1111.1111 was dezimal 65535 macht (wieder von 0 bis 65535 einschliesslich, insgesamt 655356)
    ( Mit kalc kann man sich das schön angucken, wenn man in den Einstellungen auf "Logik" schaltet und dann mit den Optionsfeldern zwischen Dezimal und Binär hin- und herschaltet. )


    Damit lassen sich -wie schon gesagt- nur ganze Zahlen darstellen.
    Will ich noch ganze Minuszahlen speichern, dann muss ich ein Bit von der tatsächlichen Breite für das Vorzeichen opfern.
    1 Bit weniger nimmt die Hälfte. Damit halbieren sich die jeweiligen maximalen Zahlen, dafür können dann aber ebensoviele negative Zahlen gespeichert werden. Also von -127 über die 0 bis zur 127, oder von der -32767 über die 0 bis zur 32767.
    Hier gibt es also jedesmal Ärger, wenn man Operationen durchführt, die den Zahlenbereich über- oder unterschreiten würden.


    Das zweite Format nennt sich Floating Point (Fließkommazahlen).
    Das ist die wissenschaftliche Art sehr große, oder sehr kleine Zahlen darzustellen. (Auch dafür gibt es natürlich allerlei Normen). Im wesentlichen sieht das so aus 3,14 * 10² was letztlich 314 darstellt.
    Es wird einfach eine Kommazahl mit ein paar Nachkommastellen geschrieben und die Kommastelle mit der Zehnerpotenz verrückt.
    Das hat natürlich in jedem Falle eine Ungenauigkeit. Wenn ich mit Zahlen um zehn hoch minus 34 rechne, fallen nun mal bei 4 Nachkommastellen 30 Stellen Genauigkeit weg. Und gerundet muss ja auch noch werden.
    Alle Floatingpoint Operationen werden zusammengesetzt aus einfachen Integeroperationen. Deshalb spricht man man FLOPS == FLoatingpointOPerationS. Da die ja zuerst in Integeroperationen umgerechnet werden müssen, um dann wieder mit Rechenleistungsverdunstung in Floatingpointzahlen zusammengesetzt zu werden. Man lässt also eine beträchtliche Zahl an Floatingpoint Rechnungen auf die Kiste los, und die rechnet sich die Bits wund.


    Wenn man nun 0,2 * 3 rechnen will, wird zuerst die Integer 3 in eine Float 3 umgerechnet und dann die Multiplikation zweier Floats durchgeführt.
    Auch aufwendig.


    Das dritte Format findet kaum mehr Verwendung. Es ist das BCD == BinaryCodedDecimal. Das ist -unter Speicherplatzverschwendung- reine Dezimalarithmetik. Dabei werden je ein Nibble (also vier Bits) für ein Zahlzeichen (von 0 bis 9) verwendet. Dieses Fromat gibt es gepackt (und somit rechenintensiver) und ungepackt. Es fand hauptsächlich in wirtschaftlichen Andwendungen mit Cobol Anwendung.


    Heute wird das alles von ziemlich hochoptimierten Libraryroutinen durchgeführt und man merkt davon meist nichts.
    Außer man verwendet Plasmoiden.
    Das ist aber ein typischer Anfängerfehler und sollte dem Plasmoidenverbrecher mittels Bugreport um die Ohren geschlagen werden.


    Es gibt übrigens von alters her ein GNU- Programm names bc (==BinaryCalculator). Das kann man in der Konsole einfach aufrufen und dann interaktiv drin rumrechnen, oder man piped seine Rechnung hinein. Und dieses Ding -man mag es gar nicht glauben- rechnet korrekt. In beliebiger Genauigkeit.
    Falls man grade kurz vor Weihnachten vergessen hat Heizöl, Briketts und Feuerwerk zu kaufen, kann man mit einem schlichten Konsolenbefehl seine Kiste in einen Heizlüfter umfunktioneren.
    Lasse einfach Pi auf zehn Millionen Stellen genau ausrechnen.


    Also, liebe Gemeinde, sinket in Ehrfurcht darnieder
    und betet an das göttliche Linux, das sogar 0,2 * 3 rechnen kann.
    Also in bestimmten Situationen.
    Mit bestimmten Programmen.

  • Sokrates sagte, dass er nichts wisse.
    Ich bin viel, viel klüger als Sokrates.
    Ich weiß ganz genau, dass ich gar nichts weiß.

    Auch Goethe soll gesagt haben (Faust) "Je mehr ich weiß, desto mehr weiß ich, das ich nichts weiß,"


    Mir geht das schon seit 60 Jahren so.
    Deshalb suche ich in meinem Job und mit Euch nach Lösungen, dort wo es keine geben kann.


    Manchmal oder öfter, denn mit dem Altersstarrsinn kommt auch Weisheit, finde ich welche.


    Und glaubt mir, es macht sogar Spaß!

    Für den Inhalt des Beitrages 101593 haftet ausdrücklich der jeweilige Autor: Kanonentux