Priorität mathematischer Operationen in C

Fragen zu allen anderen Programmiersprachen.
bizzl
Beiträge: 82
Registriert: 08.09.2005 18:07
Computerausstattung: AMD Athlon II X4 635
Windows 7 64 Bit
Wohnort: Nordhessen - früher : Südniedersachsen

Beitrag 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.
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Ich wusste gar nicht, dass ein C Compiler den Standard für die Priorität
der mathematischen Operatoren fest setzt :twisted:...
Bild
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag von Zaphod »

das ist auch quark, in c gilt die mathematische reihenfolge.
MARTIN
Beiträge: 454
Registriert: 08.09.2004 14:03
Wohnort: Kiel

Beitrag von MARTIN »

In C werden Operatoren derselben Rangs von links nach rechts auggewertet.
Amilo 1667|Suse Linux 10.1_64bit/WinXP |PB 4.00/3.94
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag 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.
bizzl
Beiträge: 82
Registriert: 08.09.2005 18:07
Computerausstattung: AMD Athlon II X4 635
Windows 7 64 Bit
Wohnort: Nordhessen - früher : Südniedersachsen

Beitrag von bizzl »

http://home.fhtw-berlin.de/%7Ejunghans/ ... dence.html

Die Auswertungsreihenfolge ist zumindest in ANSI-C nicht definiert.
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag 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.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag von Zaphod »

im buch von Kernigan und Ritchie steht das auch so. als erfinder der sprache werden die es wohl wissen.
Benutzeravatar
Sylvia
verheiratet<br>1. PureGolf-Gewinner
Beiträge: 487
Registriert: 29.08.2004 09:42
Wohnort: Old Europe

Beitrag 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)
Basic Pur = PureBasic
MARTIN
Beiträge: 454
Registriert: 08.09.2004 14:03
Wohnort: Kiel

Beitrag von MARTIN »

Also von links nach recht.
Amilo 1667|Suse Linux 10.1_64bit/WinXP |PB 4.00/3.94
Antworten