Stammtisch & Kaffeekranzerl

  • Wenn man nen Spiegel vorgehalten bekommt und nur die Dinge sieht, welche man anderen ankreidet...

  • Inwiefern hab ich denn nicht recht?


    Nun, es hat schon etwas mit der Größe der Zahl zu tun.


    Bei welcher Sprache bekommt man denn da Fehlermeldungen?


    Na zum Beispiel bei R. Eigentlich muss man ja hoffen, dass es bei den meisten eine Fehlermeldung gibt, wenn das Ergebnis der Verrechnung zweier Zahlen den Wertebereich des Datentyps überschreitet. Denn die Alternative ist ein Ergebnis im Wertebereich, das nicht dem mathematischen entspricht. Aber diese Fehlerquelle kommt vor, insofern sind viele Sprachen wohl auch nicht dagegen gesichert.

  • Nun, es hat schon etwas mit der Größe der Zahl zu tun.

    und wie? was ändert sich gemäß der Größe der gegebenen Zahl am zugrundeliegenden Typ?



    Na zum Beispiel bei R. Eigentlich muss man ja hoffen, dass es bei den meisten eine Fehlermeldung gibt, wenn das Ergebnis der Verrechnung zweier Zahlen den Wertebereich des Datentyps überschreitet. Denn die Alternative ist ein Ergebnis im Wertebereich, das nicht dem mathematischen entspricht. Aber diese Fehlerquelle kommt vor, insofern sind viele Sprachen wohl auch nicht dagegen gesichert.

    häh gerade bei R bekommt man doch keine Fehlemeldung, sonst wäre die Frage ja garnich aufgekommen.

    Auch bei allen anderen mir bekannten Sprachen bekommt man da keine Fehlermeldung.

    Bei C und C++ ist es zB schlicht "undefined behavior"

  • nachdenklich und Wemir

    Kann ich mich zu euch an den Tisch setzen? Ich hab zwar nicht besonders viel Ahnung vom Programmieren, aber ich sitz auch nur daneben und nippe brav an meiner Weißweinschorle - gestern war einfach zu viel und der Tresen sieht wieder so durstig aus.


    Btw. etwas, was mich im Zusammenhang mit Corona ziemlich genervt hat: 150 Öcken, weil ich so blöd war mir das Gesichts-Tütü von Nase-Mund zu nehmen und erst 20 Meter vor dem Ausgang der Bahntunterführung war (also gefühlt draußen). Das Ordnungsamt fand's wohl nötig, mir keine Verwarnung auszusprechen, sondern ging voll drauf. Argh, so erzeugt man Akzeptanz in der Bevölkerung.....

  • Also man kann die Normalisierung physischer Übergriffigkeit in Gruppen, denen man ausgesetzt ist, mehr als dass man sie frei wählt, sicherlich kritisieren, denn so entsteht Corpsgeist und tradiert sich dysfunktionales Verhalten, weil einem ein Impuls, Übergriffigkeit abzulehnen oder zu problematisieren, aberzogen wird.


    Man würde hoffen in einem Freundeskreis findet eine gewisse Kalibrierung statt, so dass jemand, der sehr negativ auf solche Körperlichkeit reagiert, dann zumindestens nach einer Weile auch geschont wird.


    Ich war allerdings auch vom Verlauf des Gesprächs überrascht, weil ich nicht dachte Marners "hinter die Löffel" würde in irgendeiner Form physisch appliziert, was aber doch so zu sein scheint, und ich Clives "von physischer Gewalt schwadronieren" für billige Rhetorik hielt aber anhand des Festhaltens an dem Punkt jetzt nicht sicher bin, ob ernsthaft Gewaltsprachbilder kritisiert werden, was mir bisher nicht als ein Anliegen aufgefallen wäre.

  • Zum Essen und Trinken darf man Maske entsprechend kurz abnehmen,

    Beim Heimspiel von Borussia Mönchengladbach letzes WE mussten die Zuschauer während des Spiels auch an ihrem Platz Maske tragen. Außer natürlich beim Essen, trinken oder rauchen.

    Was dann natürlich so ausgelegt wurde, dass einige Fans 90 Minuten lang Snacks aßen oder Zigarre rauchten ...


    Btw. etwas, was mich im Zusammenhang mit Corona ziemlich genervt hat: 150 Öcken, weil ich so blöd war mir das Gesichts-Tütü von Nase-Mund zu nehmen und erst 20 Meter vor dem Ausgang der Bahntunterführung war (also gefühlt draußen). Das Ordnungsamt fand's wohl nötig, mir keine Verwarnung auszusprechen, sondern ging voll drauf. Argh, so erzeugt man Akzeptanz in der Bevölkerung.....

    ZACK nen neuen Q-Reichsbürger geschaffen.

    Danke Gates!

  • ZACK nen neuen Q-Reichsbürger geschaffen.

    Danke Gates!

    Ja, als ich gesagt hab, dass ich keine Belehrung brauche sondern die einfach weitermachen sollten mit der Personalienaufnahme, da hab ich schon geglaubt, dass mein Chip verrutscht ist und hab verzweifelt nach meiner Reichsflagge gesucht. Jetzt geht's aber wieder: Beepbobbeep, Merkel beste.

  • Als ich einmal telefonierender Weise in meinen Stamm Supermarkt marschiert bin (Triggerwarnung: martialische Sprache) und deswegen die Maske vergessen habe hat wirklich niemand was gesagt hat. Erst an der Kasse ist mir mein Corona Faux pas aufgefallen aber dem Kassierer wars irgendwie auch egal.

  • Als ich einmal telefonierender Weise in meinen Stamm Supermarkt marschiert bin (Triggerwarnung: martialische Sprache) und deswegen die Maske vergessen habe hat wirklich niemand was gesagt hat. Erst an der Kasse ist mir mein Corona Faux pas aufgefallen aber dem Kassierer wars irgendwie auch egal.

    Für 150€ hätte ich als Student für fast zwei Monate von Lebensmitteln zehren können.... aaaah, mich ärgerts immer noch, diese verfluchte Chip, damn you microsoft!

  • und wie? was ändert sich gemäß der Größe der gegebenen Zahl am zugrundeliegenden Typ?


    Nicht am Typ. Aber wenn man die Zahlen als integer verrechnet, dann ist das Ergebnis auch präzise. Nur durch die Begrenzung des Datentyps auf 32bit ist die Möglichkeit für diese Berechnungen durch die Größe beschränkt.


    Aber auch die Gleitkommazahlen haben eine Präzision auf eine bestimmte Anzahl von Stellen. Die spezifische Abweichung aus dem Beispiel zeigt sich erst bei großen Zahlen, wo es mehr Stellen sind als der Präzision entspricht. Da wird anscheinend einmal das Maximum und bei anderem das Minimum des Bereichs möglicher Werte genommen, hier umfasst die Spanne wohl 6, und die Substraktion ergibt dann das entsprechende Resultat und insgesamt kommt man so auf die 8.


    häh gerade bei R bekommt man doch keine Fehlemeldung, sonst wäre die Frage ja garnich aufgekommen.

    Auch bei allen anderen mir bekannten Sprachen bekommt man da keine Fehlermeldung.

    Bei C und C++ ist es zB schlicht "undefined behavior"


    Na probier mal: 241214579L * 241214579L. Zugegeben es ist nur eine Warnung, ein Resultat bekommt man dennoch. Allerdings, wir sprechen hier ja letztlich von integer overflow, wenn der mit der Zuweisung eines Sonderwerts behandelt wird, so wie bei R, und dann im nächsten Schritt zu einer Fehlermeldung führt oder, wiederum wie bei R, durchgeschleppt wird, so dass man im Ergebnis den Fehler sieht, dann würde ich das abgrenzen zu den Fällen, wo die Behandlung dazu führt, dass ein nicht direkt erkennbares falsches Ergebnis weiter verwendet werden kann. Selbst wenn die meisten Programmiersprachen einen integer overflow nicht direkt mit einer Fehlermeldung behandeln sollten, ist die Funktion bei ersterer Konstellation noch gegeben. Wo das der Fall ist, habe ich aber tatsächlich nicht so den Überblick. Bei neueren Sprachen sind die Datentypen zum Teil ja gar nicht mehr in ihrer Größe beschränkt und werden dynamisch angepasst, wenn es erforderlich ist.

  • Nicht am Typ.

    aber um genau den Typ geht es...Der Typ bestimmt darüber wie das gegebene Datum im Speicher repräsentiert, abgelegt und dann folglich auch wie das was im Speicher liegt dann vom Program interpretiert wird.


    Aber wenn man die Zahlen als integer verrechnet, dann ist das Ergebnis auch präzise. Nur durch die Begrenzung des Datentyps auf 32bit ist die Möglichkeit für diese Berechnungen durch die Größe beschränkt.

    wir haben hier aber keine integer verrechnet, sondern doubles, da R nunmal Zahlen per default als double initialisiert. Double ist 64 Bit Gleitkommazahl.

    Wenn du nen anderen Typ verwendest, welcher die von dir gewünschte und für deinen Zweck notwendige Repräsentation im Speicher gewährleistet, dann ist klar, dass der dann präzise genug ist. Aber das Problem hier ist doch genau, dass der hier verwendete Typ das nicht mitgebracht hat.

    Also nochmal, egal wie klein oder groß die von dir zu speichernde Zahl ist, R verwendet per default immer 'double' dafür. Selbst wenn 'double' die von dir angegebene Zahl nicht vollständig darstellen kann. Dabei bekommst du auch keine Fehlermeldung. Es wird auch kein anderer Typ verwendet, nur weil du die Größe der Zahl veränderst. Was natürlich geht, ist explizit den Typ zu ändern, das aber nicht die Frage gewesen.


    Aber auch die Gleitkommazahlen haben eine Präzision auf eine bestimmte Anzahl von Stellen. Die spezifische Abweichung aus dem Beispiel zeigt sich erst bei großen Zahlen, wo es mehr Stellen sind als der Präzision entspricht.


    natürlich gibt es im PC keine unendliche Präzision, wie denn auch. Wenn du ne ganze Zahl als Gleitkommazahl im Speicher repräsentierst, verlierst du auch immer an mit gleicher Anzahl an Bits darstellbarem ganzzahligem Wertebereich, da für das gleitende Komma eben auch ne menge Bits draufgehen.

    Dafür wie exakt die Repräsentation im Speicher bzw die Formatierung von Gleitkommazahlen (floating points) in den meisten Fällen durchgeführt wird, hab ich auch schon den einschlägigen Standard genannt: IEEE 754


    Hier kann man sich richtig gut veranschaulichen, wie das wirklich dargestellt und im Speicher repräsentiert wird. Allerdings für 32 Bit floats und nicht für 64 Bit doubles:

    https://www.h-schmidt.net/FloatConverter/IEEE754.html


    Da wird anscheinend einmal das Maximum und bei anderem das Minimum des Bereichs möglicher Werte genommen, hier umfasst die Spanne wohl 6, und die Substraktion ergibt dann das entsprechende Resultat und insgesamt kommt man so auf die 8.

    irgendwie kann ich dir hier nicht so richtig folgen. Welches Maximum und vor allem welches Minimum meinst du? Die des Typs double?

    Welche Spanne? Den Abstand zwischen Min und Max vom Typ? Da wäre 6 irgendwie doch recht klein. Oder meinst die Anzahl an möglichen Stellen? Wobei ich dann wiederum die Konklusion nicht nachvollziehen kann.


    Ich hab mir das mal kurz in der 64 Bit Darstellung nach IEEE 754 augeschrieben, komm aber gerade noch nicht auf ein zufriedenstellendes Ergebnis, muss mir das nochmal genauer in R anschauen. Aber vllt sieht ja auch hier jemand wo mein Fehler liegt. Werde meine bisherigen Überlegungen der Übersichtlichkeit halber in nen Extrapost packen.


    Na probier mal: 241214579L * 241214579L.

    ja gibt NA, da du erstens explizit die Zahlen als 'integer' initialisiert hast und dann nen Overflow erzeugt hast.

    Wie du dann aber selber feststellst:

    Zugegeben es ist nur eine Warnung, ein Resultat bekommt man dennoch.

    eben, man bekommt nen NA und alles läuft weiter. Oder anders, du bekommst ne Warning (Warnung), was eben kein Error (Fehler) ist. Das sind nunmal zwei sich wesentlich unterscheidende Dinge.



    Allerdings, wir sprechen hier ja letztlich von integer overflow, wenn der mit der Zuweisung eines Sonderwerts behandelt wird

    ???

    ich weiß ehrlich gesagt so langsam nimma worüber wir reden, zumindest kommts mir so vor, als wenn das Topic stetig am springen ist.

    was für ein Sonderwert?


    Also ursprünglich und das auch worüber ich rede, gings darum warum da bei der genannten Rechnung als Ergebnis 8 anstatt 2 rauskommt.

    Das wurde dann erweitert zu, "Integeroverflow führt gewöhnlich zu nem Error".

    Das sind meine beiden Topics, wenn du da jetzt noch mehr dazu aufmachen willst, gerne. Aber können wir erstmal die klären?


    zu einer Fehlermeldung führt oder, wiederum wie bei R, durchgeschleppt wird, so dass man im Ergebnis den Fehler sieht, dann würde ich das abgrenzen zu den Fällen, wo die Behandlung dazu führt, dass ein nicht direkt erkennbares falsches Ergebnis weiter verwendet werden kann.

    versteh nicht so recht was du da aussagen willst. Vllt ists im Ergebnis auch nur der Unterschied von Warning und Error? Wir reden jetzt schon beide von dem was nen Compiler so macht?!?

    Behandelt werden muss beides. Ne Warning führt aber nicht zwingend dazu, dass das Program auch compiliert und dann hast halt Runtimeerrors oder undefined behavior in der Runtime oder einfach unerwartetes Verhalten.



    Selbst wenn die meisten Programmiersprachen einen integer overflow nicht direkt mit einer Fehlermeldung behandeln sollten, ist die Funktion bei ersterer Konstellation noch gegeben.

    ah ich glaub jetzt hab ich verstanden was du sagen willst (sorry, lass den vorherigen Absatz trotzdem stehen, da auch noch andere weiterhin passende Aussagen drin sind und ich jetzt zu faul zum umschreiben bin)

    Du meinst das NA mit Sonderwert. Ja das ungefähr so toll wie NULL.

    Kann behandelt werden, führt aber unter Garantie zu massenhaft Runtimeerrors, die viel schlimmer als Compilererrors sind. Im übrigen kannst mit nem NA auch munter weiterrechnen. Mach mal NA + 5 zB.

    Welche Funktion ist noch gegeben? Die des Programs? Das eben schonmal nicht.

    Die, dass man ne Behandlung einbauen kann? Dazu brauchst jetzt aber keine NAs oder NULLs oder Compilerwarnings, das kannst auch einfach direkt und solltest auch, selber einbauen, wenn es nicht schon eine eingebaute Prüfung darauf gibt.


    Wo das der Fall ist, habe ich aber tatsächlich nicht so den Überblick. Bei neueren Sprachen sind die Datentypen zum Teil ja gar nicht mehr in ihrer Größe beschränkt und werden dynamisch angepasst, wenn es erforderlich ist.

    Das bzw ob es die Repräsentation mit arbitrary precision gibt war doch nie die Frage?!? Hab sogar direkt erste mögliche Überlegungen für eine mögliche Implementation gebracht.

    Kann da sogar direkt ne Sprache nennen, die das macht: Python.

    Aber auch da bekommst keine eingebaute Fehlermeldung, wenn doch mal nen Overflow passiert und das war doch der Punkt?!? Wie das doch mal passieren kann, ist dann zwar doch um paar Ecken, aber eben alles nicht auszuschließen.

  • Äh, ich glaube, es läuft doch etwas zu sehr ins Kleinteilige von daher halt ich es mal kurz:


    aber um genau den Typ geht es...Der Typ bestimmt darüber wie das gegebene Datum im Speicher repräsentiert, abgelegt und dann folglich auch wie das was im Speicher liegt dann vom Program interpretiert wird.

    wir haben hier aber keine integer verrechnet, sondern doubles, da R nunmal Zahlen per default als double initialisiert. Double ist 64 Bit Gleitkommazahl.


    Deshalb sagte ich, du hast "insofern" recht.


    natürlich gibt es im PC keine unendliche Präzision, wie denn auch. Wenn du ne ganze Zahl als Gleitkommazahl im Speicher repräsentierst, verlierst du auch immer an mit gleicher Anzahl an Bits darstellbarem ganzzahligem Wertebereich, da für das gleitende Komma eben auch ne menge Bits draufgehen.


    Also spielt die Größe der verrechneten Zahlen eine Rolle.


    irgendwie kann ich dir hier nicht so richtig folgen. Welches Maximum und vor allem welches Minimum meinst du? Die des Typs double?

    Welche Spanne? Den Abstand zwischen Min und Max vom Typ? Da wäre 6 irgendwie doch recht klein.


    Ich spreche über das ursprüngliche Beispiel:


    Code
    > c <- 241214579
    > c * (c + 1) - (c - 1) * (c + 2)
    [1] 8
    Code
    > sprintf('%.0f',c * c)
    [1] "58184473122147240"


    Auf die 8 kommt man, weil der Abstand zwischen dem Maximum und dem Minimum des Unsicherheitsbereichs für c^2 6 beträgt.


    eben, man bekommt nen NA und alles läuft weiter. Oder anders, du bekommst ne Warning (Warnung), was eben kein Error (Fehler) ist. Das sind nunmal zwei sich wesentlich unterscheidende Dinge.

    ???

    ich weiß ehrlich gesagt so langsam nimma worüber wir reden, zumindest kommts mir so vor, als wenn das Topic stetig am springen ist.

    was für ein Sonderwert?


    NA ist ein Sonderwert (wie du dann erkannt hast). Ich müsste jetzt vielleicht ein weiteres "insofern" ziehen, aber wenn ich so darüber nachdenke: Es gibt natürlich einen Unterschied zwischen einem error und keinem error, hier also ein Abbruch anstatt einem Weiterlaufen mit Warnung. Aber ich sprach ja nicht von einem Fehler sondern von einer Fehlermeldung und die ist meines Erachtens nicht so klar festgezogen. Eine Warnung könnte man zum Beispiel durchaus auch als Fehlermeldung verstehen, ich kann also meine Einschränkung, es sei nur eine Warnung, zurücknehmen.


    Mein übergeordneter Punkt ist allerdings in diesem lockeren Sinne ist sogar "NA" eine Fehlermeldung, jedenfalls wenn es bis zum Ende mitgeschleppt wird. Denn wenn ein numerisches Ergebnis erwartet wird, ist damit klar, dass die Berechnung irgendwo nicht richtig ausgeführt wurde. Gegenüber dem Fall, wo der integer overflow mit der Vergabe eine Werts im Wertebereich gelöst wird, der nicht das mathematische Ergebnis sein kann, und man insgesamt ein Ergebnis bekommt, dem man aber ohne Kenntnis des tatsächlichen Ergebnis über "ist numerisch" hinaus, nicht ansieht, dass es falsch ist.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!