Так же как и в головоломках 26 и 27 мы должны узнать количество итераций цикла (count):
final int START = 2000000000;
int count = 0;
for (float f = START; f < START + 50; f++)
count++;
Если вы думаете, что count == 50, то ошибаетесь. Это вам не целочисленная арифметика! Начальное значение цикла близко к максимальному и требует 31 бит, но тип float предоставляет только 24 бита для точности числа. Часть числа теряется при конвертации, т.е. (float)2000000000 == (float)2000000050. Вот так и получается, что тело цикла не будет выполнено...
Авторы не рекомендуют использовать float и double как индекс цикла, так как поведение при больших значениях непредсказуемо. Если же все-таки нужно использовать арифметику с плавающей точной, то лучше использовать double, так как тут больше точность. И будьте начеку!
Слущай, СЭМми, а это всё твои решения пазлов жабских, или ты самое интересное подбираешь? Может, тебе ветку на сайте своем создать, куда все складывать? Полезно будет.
ОтветитьУдалитьЭто я последовательно читаю книжку Джошуа Блоха "Java Puzzlers" на английском языке. Выкладывать мне проще на блог, а выборку можно по тегу puzzle делать...
ОтветитьУдалитьА вдруг у тебя еще другие какие паззлы будут? Надо еще пару тегов добавить...
ОтветитьУдалитьБудем решать проблемы по мере их поступления.
ОтветитьУдалить