4.9 Floating-Point Divide Versus Integer Divide

I l @ ve RuBoard

The division operator is special. There is a vast difference between an integer divide and a floating-point divide. In an integer divide, the result is truncated (any fractional part is discarded). For example, the integer divide value of 19/10 is 1.

If either the divisor or the dividend is a floating-point number, a floating-point divide is executed. In this case 19.0/10.0 is 1.9. (19/10.0 and 19.0/10 are also floating-point divides; however, 19.0/10.0 is preferred for clarity.) There are several examples in Table 4-2.

Table 4-2. Expression examples

Expression

Result

Result type

19 / 10

1

Integer

19.0 / 10.0

1.9

Floating point

19.0 / 10

1.9

Floating point (for clarity, do not code like this)

19 / 10.0

1.9

Floating point (for clarity, do not code like this)

C++ allows the assignment of an integer expression to a floating-point variable. It will automatically perform the integer-to-floating-point conversion and then make the assignment. A similar conversion is performed when assigning a floating-point number to an integer variable. Floating-point numbers are truncated when assigned to integer variables .

Example 4-3 demonstrates a variety of floating-point and integer operations.

Example 4-3. float1/float1.cpp
 int   integer;  // an integer float floating; // a floating-point number int main(  ) {     floating = 1.0 / 2.0;         // assign "floating" 0.5     integer = 1 / 3;              // assign integer 0     floating = (1 / 2) + (1 / 2); // assign floating 0.0     floating = 3.0 / 2.0;         // assign floating 1.5     integer = floating;           // assign integer 1     return (0); } 

Notice that the expression 1/2 is an integer expression resulting in an integer divide and an integer result of 0.

Question 4-2: Why does Example 4-4 print "The value of 1/3 is 0"? What must be done to this program to fix it?

Example 4-4. float2/float2.cpp
 #include <iostream> float answer;  // the result of the divide  int main(  ) {     answer = 1/3;     std::cout << "The value of 1/3 is " << answer << "\n";      return (0); } 
I l @ ve RuBoard


Practical C++ Programming
Practical C Programming, 3rd Edition
ISBN: 1565923065
EAN: 2147483647
Year: 2003
Pages: 364

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net