Seite 1 von 2

Verfasst: 08.09.2005 18:15
von bizzl
Sylvia hat geschrieben:>>DarkDragon:Es gilt Punkt vor Strich, allerdings nicht welcher Punkt.

Willst du mir jetzt mit diesem Gelalle beweisen, dass die PISA-Studie Recht hat ?
Natürlich der erste Punkt vor dem nächsten Punkt! Dafür gibt es Regeln.
Von hinten und einfach drauf los kannst du es mit deiner Freundin machen, aber
nicht in der Mathematik.
(Ohh man(n), das könnte jetzt wieder eine Lawine lostreten...! <) )
Hallo Sylvia,
ich muß dir widersprechen: Mit "der erste Punkt vor dem nächsten Punkt" liegst du nicht ganz richtig.
In der Mathematik ist es zwar so, aber in C zum Beispiel ist die Berechnungsreihenfolge von Ausdücken gleichen Ranges nicht definiert.
3*12/4 kann ein C-Compiler also je nach Lust und Laune als (3*12)/4 oder als 3*(12/4) berechnen.

Verfasst: 08.09.2005 19:43
von MVXA
Ich wusste gar nicht, dass ein C Compiler den Standard für die Priorität
der mathematischen Operatoren fest setzt :twisted:...

Verfasst: 08.09.2005 20:10
von Zaphod
das ist auch quark, in c gilt die mathematische reihenfolge.

Verfasst: 08.09.2005 20:16
von MARTIN
In C werden Operatoren derselben Rangs von links nach rechts auggewertet.

Verfasst: 08.09.2005 21:24
von Zaphod
eben, das kommt aber aufs selbe raus, denn matehmatische ausdrücke werden ja auch von links nach rechts ausgewertet.

das ganze hat jetzt aber nicht mehr wirklich viel mit amiga zu tun.

Verfasst: 09.09.2005 08:31
von bizzl
http://home.fhtw-berlin.de/%7Ejunghans/ ... dence.html

Die Auswertungsreihenfolge ist zumindest in ANSI-C nicht definiert.

Verfasst: 09.09.2005 16:22
von Danilo
http://www-ccs.ucsd.edu/c/express.html#precedence

Code: Alles auswählen

multiply                     X * Y       from left to right
divide                       X / Y
remainder                    X % Y

add                          X + Y       from left to right
subtract                     X - Y
http://info.baeumle.com/ansic.html ->
http://info.baeumle.com/ansic/c04.html#1-9

Code: Alles auswählen

Priorität  Operator                                   Assoziativität       

   15       ( )   [ ]   ->   .                        von links nach       
                                                      rechts               

   14      ! ~ ++ -- + - (TYP) * & sizeof             von rechts nach      
                                                      links                

   13      * / %  (Rechenoperationen)                 von links nach       
                                                      rechts               

   12      + - (binär)                                von links nach       
                                                      rechts

   ...

Im Buch "C Entpackt" von Herbert Schildt, der im ANSI/ISO Komitee sitzt,
steht auf Seite 67 unter "Zusammenfassung der Rangfolge":
Beachten Sie, dass alle Operatoren, außer den unären und dem ? von links nach rechts verknüpft werden. Die unären Operatoren (*,&,-) und das ? werden von rechts nach links verknüpft.
Aus ISO/IEC 9899 geht das tatsächlich nicht so leicht hervor.
Man findet aber einige Hinweise, so z.b. in Annex H:
Annex H (informative)
Language independent arithmetic
H.1 Introduction
1 This annex documents the extent to which the C language
supports the ISO/IEC 10967−1 standard for language-independent
arithmetic (LIA−1).
LIA−1 is more general than IEC 60559 (annex F) in that it
covers integer and diverse floating-point arithmetics.
C schliesst automatisch mehrere andere Standards ein, so
auch ISO/IEC 10967-1 für Sprachenunabhängige Arithmetik.
Die mathematischen Gesetze bei Operatoren der gleichen
Prioritätsebene gelten dadurch auch für C.

Verfasst: 09.09.2005 16:56
von Zaphod
im buch von Kernigan und Ritchie steht das auch so. als erfinder der sprache werden die es wohl wissen.

Verfasst: 09.09.2005 18:39
von Sylvia
>>bizzl: ...kann ein C-Compiler also je nach Lust und Laune als
>>(3*12)/4 oder als 3*(12/4) berechnen.

Rechne mal nach 8) . Hast du dir da nicht zufällig ein schlechtes Beispiel ausgesucht ?

Mathematisches Gesetz: Wird in einem Term zuerst multipliziert und dann dividiert,
ist die Rechenreihenfolge egal, aber anderstherum nicht. Diese Aussage steht zwar
in keinem Lehrbuch unter Distributivgesetz, ist aber so. Und weil die Mathematik
so schön ist, liebe ich sie.


Probiers aus:

z.B. 10 = 5*6/3 = 5*(6/3) = (5*6)/3
z.B. 24 = 12*8/4 = 12*(8/4) = (12*8 )/4

aber:

z.B. (10/5)*3 = 15 <> 10/(5*3)
z.B. (24/6)*5 = 20 <> 24/(6*5)

Verfasst: 09.09.2005 18:54
von MARTIN
Also von links nach recht.