003
02.02.2009, 19:17 Uhr
0xdeadbeef
Gott (Operator)
|
C++: |
b = (312 - a) / 52.0;
|
reicht schon. Der Hintergrund sind die usual arithmetic conversions, die bestimmen, welchen Typ ein einfacher arithmetischer Ausdruck hat:
Zitat von C++-Standard 5 (9): |
Many binary operators that expect operands of arithmetic or enumeration type cause conversions and yield result types in a similar way. The purpose is to yield a common type, which is also the type of the result. This pattern is called the usual arithmetic conversions, which are defined as follows:
— If either operand is of type long double, the other shall be converted to long double. — Otherwise, if either operand is double, the other shall be converted to double. — Otherwise, if either operand is float, the other shall be converted to float. — Otherwise, the integral promotions (4.5) shall be performed on both operands. — Then, if either operand is unsigned long the other shall be converted to unsigned long. — Otherwise, if one operand is a long int and the other unsigned int, then if a long int can represent all the values of an unsigned int, the unsigned int shall be converted to a long int; otherwise both operands shall be converted to unsigned long int. — Otherwise, if either operand is long, the other shall be converted to long. — Otherwise, if either operand is unsigned, the other shall be converted to unsigned. [Note: otherwise, the only remaining case is that both operands are int ]
|
Da 312, a und 52 alles int-Ausdrücke sind, ist der Typ von (312 - a) int, dementsprechend auch der von (312 - a) / 52, und int kann halt keine Nachkommastellen speichern. Im Ausdruck (312 - a) / 52.0 ist (312 - a) int, 52.0 aber double, und wie du oben nachlesen kannst, ist damit auch der Gesamtausdruck double. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra Dieser Post wurde am 02.02.2009 um 19:19 Uhr von 0xdeadbeef editiert. |