<< Chapter < Page | Chapter >> Page > |
Floating divide by zero
The program in Listing 4 attempts to divide the double value of -11 by the double value of zero.
No runtime error with floating divide by zero
In the case of floating types, an attempt to divide by zero does not produce a runtime error. Rather, it returns a value that the println method interprets and displays as either Infinity or -Infinity .
What is the actual value?
The actual value returned by the division operation in this program is the value of a static final variable in the Double class named NEGATIVE_INFINITY . (There is also a value for POSITIVE_INFINITY .)
Is this a better approach?
As you learned earlier, if you attempt to divide by zero with integer arithmetic, an exception will be thrown. Is this a better approach than throwing an exception?I will let you be the judge of that. The important thing is that you know what will happen in both cases and beprepared to deal with the consequences.
In either case, you could test the right operand before the divide to ensure that it isn't equal to zero, and then take appropriate action if it is zero.
Cannot use exception handling in this case
For floating divide by zero, you cannot handle the problem by using try-catch because an error or exception won't be thrown.However, you can test the result following the divide to see if it is equal to either of the infinity values mentioned above . Note, however, that you will need to test against the constant values shown above and not against the output produced by the println method.
And the correct answer to the question is...
C. -Infinity
What output is produced by the program shown in Listing 5 ?
Listing 5 . Mixed-type arithmetic. |
---|
public class Mixed01{
public static void main(String args[]){
new Worker().doWork();}//end main()
}//end class definitionclass Worker{
public void doWork(){//Integer.MAX_VALUE = 2147483647
int myIntVar = Integer.MAX_VALUE;System.out.println(2.0 * myIntVar);
}//end doWork()}//end class definition |
This program illustrates the use of arithmetic operators with operands of different types.
Declare and initialize an int
The method named doWork declares a local variable of type int named myIntVar and initializes it with the largest positive value that can be stored in type int .
Evaluate an arithmetic expression
An arithmetic expression involving myIntVar is evaluated and the result is passed as a parameter to the println method where it is displayed on the computer screen.
Multiply by a literal double value
The arithmetic expression uses the multiplication operator (*) to multiply the integer value stored in myIntVar by 2.0 (this literal operand is type double by default) .
Automatic conversion to wider type
When arithmetic is performed using operands of different types, the type of the operand of the narrower type is automatically converted to the type of the operand of the wider type, and the arithmetic is performed on the basis of the wider type.
(By narrower and wider, we mean the width of the range of values that can be accommodated by the type in question.)
Notification Switch
Would you like to follow the 'Ap computer science a, clarification of the java subset' conversation and receive update notifications?