Whatever Floats Your Boat

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?