I am in the process of revising a CS1 textbook. I made changes requested by
users, added snazzy exercises and sample programs, and the publisher sent the
draft out to reviewers. A couple of reviewers said in no uncertain terms that I
was wrong, wrong, wrong in using `double`

for my examples. I should
use `float`

instead. Another professor contributed a business
problem set that used `float`

where I would have used
`double`

, or, if I had been allowed, `BigDecimal`

.

What gives? For financial calculations, `float`

aren't so
wonderful. For example,

float unitPrice = 34999.95F; int quantity = 199; float totalPrice = unitPrice * quantity; // Off by five cents from the correct value

Clearly, `BigDecimal`

would be the right choice, but they are
awful to use in Java.

BigDecimal unitPrice = new BigDecimal("34999.95"); BigDecimal quantity = new BigDecimal("199"); BigDecimal totalPrice = unitPrice.multiply(quantity);

In Scala, you could write `BigDecimal("34999.95") * 100`

. But
that doesn't help me. Nobody uses Scala for their introductory course. Anyway,
reviewers were adamant not to use objects and method calls too early. So,
`BigDecimal`

wasn't going to fly. But I digress.

Back to `float`

. Even if you don't care about limited precision,
they are also awkward. You have to remember to put `F`

after each
literal, and you have to cast the results of mathematical methods:

float goldenRatio = 0.5F* (1 +(float)Math.sqrt(5))

For what? Saving four bytes? In a student program that gets executed a handful of times?

I can see the use of `float`

in a 1000 x 1000 matrix, if the
added precision isn't needed, to save the storage. Does it save time? I seem to
recall that in an Intel processor, when both `float`

and
`double`

get extended unless you use `strictfp`

. No
reviewer had requested that I cover that :-)

Am I missing the boat here? Is there another reason to use
`float`

in this day and age, other than saving storage when you
have a lot of them? I read through What
Every Computer Scientist Should Know About Floating-Point Arithmetic, and
was not enlightened. If you use `float`

, can you tell me why?