[RANT] Der Interpreter
-
BastetFurry -
1. Juli 2010 um 12:30 -
Erledigt
Es gibt 52 Antworten in diesem Thema, welches 9.474 mal aufgerufen wurde. Der letzte Beitrag (
-
-
Deine ASCII-art setzt aber eben bereits eine Klammersetzung voraus
-
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. -
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. -
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:
-
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 ...
-
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? -
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
-
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? -
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 ;Dnaja 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

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.) -