[RANT] Der Interpreter

Es gibt 52 Antworten in diesem Thema, welches 9.474 mal aufgerufen wurde. Der letzte Beitrag (17. August 2010 um 23:05) ist von Herbarius.

  • Und aufm Zettel?
    Sollte doch ungefähr so aussehen: (ASCII-Art, beware!)

    Code
    4
     3
    2


    Also würde ich rechnen:
    3^4=81
    2^81=2417851639229258349412352

    Blog: Bitte melde dich an, um diesen Link zu sehen. - The Seventies Board: Bitte melde dich an, um diesen Link zu sehen. Bitte melde dich an, um diesen Link zu sehen.

    Ein Terminal und ein Z80 :D

  • Deine ASCII-art setzt aber eben bereits eine Klammersetzung voraus

    Bitte melde dich an, um diesen Link zu sehen.
    Bitte melde dich an, um diesen Link zu sehen.
    Bitte melde dich an, um diesen Link zu sehen.

  • Ok, gut das ich von Mathe kein Fahrplan habe. :)
    Ich kann Spiele programmieren, Rechner reparieren und Metallarbeiten (CNC-Drehen, CNC-Fräsen, SPS, ...) , aber höhere Mathematik geht mir ab.

    Blog: Bitte melde dich an, um diesen Link zu sehen. - The Seventies Board: Bitte melde dich an, um diesen Link zu sehen. Bitte melde dich an, um diesen Link zu sehen.

    Ein Terminal und ein Z80 :D

  • Und aufm Zettel?


    Auf dem Zettel verwendet man eine andere Notation, da schreibt man die Potenz klein an die obere rechte Ecke. Bei C64 Basic dagegen ist ein Pfeil nach oben und kein Grössenunterschied bei den Zahlen.

  • Warum das? Gleiche Operatoren bzw Operatoren mit gleicher Priorität werden halt von vorne nach hinten ausgeführt.


    Weil die Potenzoperation in der Mathematik rechtsassoziativ ist.

    10 x=rnd(-1963):fori=1to81:y=rnd(1):next
    20 forj=1to5:printchr$(rnd(1)*16+70);:next
    30 printint(rnd(1)*328)-217

    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.

  • Oh, wieder was gelernt!

    Interessanterweise scheint sich die Rechtsassoziativität im Computer- und Taschenrechnerbereich nicht durchgesetzt zu haben, hab hier gerade mal diverse Taschenrechner, den wissenschaftlichen Taschenrechner von Windows sowie VB 6 und VB.NET probiert - alle werten von links nach rechts aus. Ist aber auch klar, weil das für die Standrad-Parser irgendwie blöd ist, die Potenz plötzlich andersherum auszuwerten. Nicht, dass es das besser machen würde, mit der Begründung wären ja auch die Billig-Taschenrechner, die nichtmal Punkt-vor-Strich-Rechnung beherrschen ok...

    Kleine Anmerkung: Wenn man die POW() Funktion benutzt, stimmt es wieder, weil sich da die Schreibweise sozusagen der Assoziativität anpasst:

    Code
    Math.Pow(2, Math.Pow(3, 4))

    Basic V2 Programme unter Windows editieren: Bitte melde dich an, um diesen Link zu sehen.

  • Oder die Krücke vom ZX-80/81?

    Die waren auch gar nicht sooo schlecht, vor allem, wenn man bedenkt, dass in den gerade einmal 8K des ZX81 auch noch das CHAR-ROM und eine komplette Drucker-Firmware gequetscht werden musste - zzgl. der Routinen, um das Bildschirmbild in Software zu erzeugen.
    Die String-Routinen waren aber wesentlich flexibler, ON GOTO / ON GOSUB wird überflüssig, wenn man wie beim Sinclair-BASIC auch berechnete Zeilennummern anspringen kann und die Syntax-Prüfung schon bei der Eingabe von Programmen (und nicht erst zur Laufzeit) hat so manche Nerven geschont.

  • a) das basic ist auch für 1983 schlecht (einfach mal mit der konkurrenz vergleichen)

    Wirklich ärgerlich find/fand ich die doch arg rudimentäre bzw. überhaupt nicht vorhandene Unterstützung von VIC und SID.

    Beide Einwände sind sehr richtig, man vergleiche, was man alles auf dem Atari 800XL machen konnte. Man darf also schon sagen, das Basic V2.0 war damals schon nicht der Hit.

  • Beide Einwände sind sehr richtig, man vergleiche, was man alles auf dem Atari 800XL machen konnte. Man darf also schon sagen, das Basic V2.0 war damals schon nicht der Hit.

    Das war ja auch schon genau so beim PET im Einsatz und dazwischen im VC-20.

    Der CBM-4032 hatte bereits Basic-4, das ja auch kaum mehr konnte (Diskbefehle) aber wenigstens eine verbesserte Garbage Collection hatte. Und der 4032 kam lang vor dem C64 ...

    Bitte melde dich an, um diesen Link zu sehen. --- Bitte melde dich an, um diesen Link zu sehen. --- Bitte melde dich an, um diesen Link zu sehen.

  • Zitat von Unseen

    Weil die Potenzoperation in der Mathematik rechtsassoziativ ist.


    Das sind zwei komplett verschiedene Notationen. Beide sind korrekt solange sie so definiert wurden wie sie sind. Oder würdest du sagen, z.B. die Bitte melde dich an, um diesen Link zu sehen. ist verkehrt, weil ALLES (egal ob Potenz, Addition, Stringvergleich usw) rekursiv von links nach rechts ausgeführt wird?

  • Oder würdest du sagen, z.B. die Bitte melde dich an, um diesen Link zu sehen. ist verkehrt, weil ALLES (egal ob Potenz, Addition, Stringvergleich usw) rekursiv von links nach rechts ausgeführt wird?


    Natürlich nicht, denn der Begriff der Links-/Rechtsassoziativität ergibt bei der PN/RPN keinen Sinn. Aber du kannst ja mal beispielsweise 2^3^4 in Google, in Wolfram Alpha, in Python (als 2**3**4), in Ruby (wie Python), in bc oder in diverse weitere Systeme zur Auswertung von mathematischen Ausdrücken in symbolischer Form eingeben. Wie oft bekommst du da 4096 als Ergebnis und wie oft 2.41785164 * 10^24?

    10 x=rnd(-1963):fori=1to81:y=rnd(1):next
    20 forj=1to5:printchr$(rnd(1)*16+70);:next
    30 printint(rnd(1)*328)-217

    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.

  • Gerade die polnische Notation hätte ich jetzt als Beispiel gewählt, wie man zum richtigen Ergebnis kommt, nämlich durch korrekte Eingabe - zur Not mit Klammern. Der Computer rechnet immer nur so genau wie seine Eingabe - und die macht der Benutzer. Ein "sanity check" des Ergebnisses ist IMMER erforderlich. Oder hat Euch Euer Mathelehrer das nicht beigebracht, als in der 8. Klasse der Taschenrechner eingeführt wurde?

    Sich jetzt darüber aufzuregen, wie mathematisch falsch denn das Parsing eines Interpreters ist, ist vollkommen sinnfrei, denn jeder Parser ist *berechtigterweise* anders. Auch in der Mathematik gibts nicht immer ganz genaue Festlegungen, so dass man erst mit Klammern und ein bischen Texterklärung zu einem eindeutigen Ergebnis kommt.

    Wie oft passiert's, dass man "drehe um 90 Grad" sagt und der Empfänger dreht in die falsche Richtung? Für Viele ist "positiv" der Uhrzeigersinn und für Mathematiker ist ein positives Vorzeichen beim Winkel "gegen den Uhrzeigersinn", weil man's in der HöMa-Vorlesung unter "mathematisch positiv" so eingetrichtert bekommen hat. Und dann fangen die Diskussionen mit den Physikern an...

    Und wo wir schon bei "ist doch alles Definitionssache" sind: Man kann mathematisch korrekte Räume schaffen, in denen die Grundrechenarten umdefiniert werden. Hatten wir nicht mindestens einen Mathe-Studenten hier im Forum?

    Jens

    Bitte melde dich an, um diesen Link zu sehen. - Das offizielle iComp Supportforum ist online.

  • Zitat

    Aber du kannst ja mal beispielsweise 2^3^4 in Google, in Wolfram Alpha, in Python (als 2**3**4), in Ruby (wie Python), in bc oder in diverse weitere Systeme zur Auswertung von mathematischen Ausdrücken in symbolischer Form eingeben. Wie oft bekommst du da 4096 als Ergebnis und wie oft 2.41785164 * 10^24?


    Das ist vollkommen egal. Wenn es in der Sprache Basic so definiert wurde, dann ist Commodore Basic da korrekt. Man kann als Sprache definieren was man will. Das man bei Basic für eine handvoll Operationen die Prioritäten aus der mathematischen Notation übernommen hat sagt nicht, dass die mathematische Notation ein Naturgesetz ist. Man war lediglich freundlich zu den Anwendern, denn die kannten das mit dem "* vor +" ja schon aus der Schule und wollte denen nicht zumuten, da etwas neues zu lernen.

  • Das ist vollkommen egal. Wenn es in der Sprache Basic so definiert wurde, dann ist Commodore Basic da korrekt.


    Ob das für BASIC so definiert wurde oder nicht ist in diesem Zusammenhang vollkommen egal. Meine ursprüngliche Aussage war "127 für den Potenzoperator (der mathematisch betrachtet falsch bindet)" - der Potenzoperator wird im mathematischen Kontext rechtsassoziativ definiert, beim Commodore-BASIC ist er linksassoziativ, also bindet er aus Sicht des mathematischen Kontexts verkehrtherum. Ist das so schwer zu verstehen?

    10 x=rnd(-1963):fori=1to81:y=rnd(1):next
    20 forj=1to5:printchr$(rnd(1)*16+70);:next
    30 printint(rnd(1)*328)-217

    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.

  • Was soll an dem Potenzoperator "mathematisch falsch" sein? Der berechnet eine Potenz, das ist das einzige was daran "mathematisch" relevant ist. Mit welcher Notation man nun die Potenz hinschreibt hat nichts mit der eigentlichen Mathematik zu tun.

  • Hallo Leute,

    also ich bin nun wirklich kein Mathematiker oder Physiker aber das
    was Wiesel beigetragen hatt klingt fuer mich sehr logisch und einleuchtend.
    viel interesanter finde ich die frage warum zB teilen durch 0(NULL) in der mathematik
    als unmoeglich erscheint... zB ich habe 256 Aepfel und teile sie mit
    niemandem (0(NULL)) wieviele aepfel habe ich denn dann? fuer mich
    bleibt da ne 256 stehn. aber das ist ja ein anderes thema denn 2+2!=4 ;D

    naja auf jeden fall muss ich sagen das wie Wiesel schon sagte es ja am
    benutzer selber liegt wie er etwas "parsen" laesst. habe ich die aufgabe 2^2^2
    zu rechen und das ergebniss weicht von der norm ab dann muss ich
    die "prioritaeten aendern, zB mit hilfe der klammer.. dann habe ich im grunde
    die selbe aufgabe nur anders aufgeschrieben naehmlich 2^(2^2).
    was ja auch im mathematischen sinn voellig korrekt ist.
    (zumindest so weit ich das beurteilen kann)
    auf jeden fall muss man wie in der schule schon beigebracht
    das ergebniss verifizieren um sagen zu koennen
    ERGEBNISS=IO (das war dann immer das doppelt unterstreichen nachdem
    man verifiziert hatt) :)

    so das wars mal von mir ich hoffe das war nun nich zu babybrain :D

    salute

    PS: deutsche sprache ist nicht logisch aufgebaut daher entschuldigt meine nicht
    vorhandenen kommas und satzzeichen :/

    Edit: ausserdem so meine meinung kann sich jeder dahingehend bilden um seinen eigenen
    interpreter zu basteln, was zwar mit arbeit verbunden ist, aber auch wissen schafft.
    ich habe irgenwie auch nie gewusst wie mann in asm progt
    (also wo ich meine cevi bekomm hab) erst durch euer forum hab ich mir ein paar
    grundlagen gelernt und mich dann mit der matherie auseinandergesezt,
    und viola meine eignen plot routinen geschrieben zuerst mit sys aufrufen dann
    in den interpreter "eingeschmuggelt" und fertig is der erweiterte interpreter
    der wenn man will auch die rechtslinks notation der potentierung beherscht.

    Edit2: das soll nun kein gemecker sein nur eine kritick an diejenigen die
    den interpreter kitisieren oder so *gruebelt um was es eigendlich ging*...


  • viel interesanter finde ich die frage warum zB teilen durch 0(NULL) in der mathematik
    als unmoeglich erscheint... zB ich habe 256 Aepfel und teile sie mit
    niemandem (0(NULL)) wieviele aepfel habe ich denn dann? fuer mich
    bleibt da ne 256 stehn.


    doch, du teilst mit einem, mit dir nämlich. oder mathematisch ausgedrückt muss das ergebnis einer division (c) wieder den ursprünglichen wert(a) ergeben, wenn du es mit dem divisor (b) multiplizierst: a : b = c und c * b = a. damit 256 : 0 = 256 stimmen würde, müsste 256 * 0 = 256 sein. was offensichtlich nicht zutrifft. aber 256 : 1 = 256 und 256 * 1 = 256.

  • ha ja das leuchtet ein... endlich mal ne ordentliche erklaerung die ich so auch
    annehmen kann und nich nur "das ist halt so",
    zumindest is das nun auch mal logisch nachvoll ziehbar fuer mich dargelegt ^^

    danke dir Ogd :)

    kannst du mir nun auch noch erklaeren wie die auf dieses 2+2=5 kommen?
    siehe:
    Bitte melde dich an, um diesen Link zu sehen.
    Bitte melde dich an, um diesen Link zu sehen.
    Bitte melde dich an, um diesen Link zu sehen.

    das hab ich bis heute nich verstanden warscheinlich weil ich kein methematiker bin,
    aber interesant finde ich das und wenn mir das mal jemand in gewoehnlichen worten
    beibringen kann faend ich das total ueberobermegaaffenti..engeil ;)

    salute

  • [OT]Bin auch eine Mathe-Niete, kann es aber erklären.

    Besonders in dem metacafe-Video sieht man es leicht, da wird der Fehler ja auch aufgelöst. Durch das Operieren mit negativen Zahlen wird der Betrachter irre geführt. Nur weil Minus mal Minus Plus ergibt, muss man beim Auflösen von "quadratischen Gleichungen" trotzdem mit "Betrag" arbeiten (die senkrechten Striche). Das lässt der Stiftschwenker halt mal unter den Tisch fallen, als er auf 5 = 4 kommt.

    Der Wiki-Link bezieht sich auf George Orwell's 1984, eine Dystopie, in der eine totalitäre Gesellschaft dargestellt wird. Gutes Buch, das ich jedem empfehlen kann. Die Pointe ist, dass der Protagonist nach wochenlanger Folter und sonstiger Bearbeitung durch das Regime und seine Handlanger nicht nur sagt 2 X 2 sei 5, damit die Folter aufhört, sondern dass er es am Ende wirklich glaubt. IIRC zeigt ihm sein Gegenüber 4 Finger und erhält dann auf die Frage "Wieviele Finger sehen Sie?" irgendwann die Antwort 5.[/OT]

  • 1. Nicht unüberlegt Wurzeln aus negativen Zahlen ziehen (Bitte melde dich an, um diesen Link zu sehen.).
    2. Division durch 0 (Bitte melde dich an, um diesen Link zu sehen.)

    LIFE IS SHORT - Break the rules, do more, need less, smile often, be brave, stay true, dream big, forgive quickley, kiss slowly, love truly, laugh uncontrollably and never regret anything that made you smile.