<< 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

Mixed-type arithmetic

What output is produced by the program shown in Listing 5 ?

  • A. Compiler Error
  • B. Runtime Error
  • C. 4.294967294E9
  • D. 4294967294
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.)

Get Jobilize Job Search Mobile App in your pocket Now!

Get it on Google Play Download on the App Store Now




Source:  OpenStax, Ap computer science a, clarification of the java subset. OpenStax CNX. Oct 03, 2015 Download for free at https://legacy.cnx.org/content/col11279/1.5
Google Play and the Google Play logo are trademarks of Google Inc.

Notification Switch

Would you like to follow the 'Ap computer science a, clarification of the java subset' conversation and receive update notifications?

Ask