Так же как и в головоломках 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, так как тут больше точность. И будьте начеку!
воскресенье, 2 сентября 2007 г.
Java Puzzle 33: Looper Meets the Wolfman
Сделайте следующий цикл бесконечным, не используя возможности Java 5:
while (i != 0 && i == -i)
Забавно, но все кроется в компьютерной арифметике. Как получаются отрицательные числа? Изменяем значение каждого бита и прибавляем 1. Это сделано для удобства работы с 0: -0 => 0xFFFFFFFF + 1 => 0. Остальные числа либо отрицательные, либо положительные, но! Отрицательных чисел больше, так как количество комбинаций бит четное, а одна из них занята 0. Мы имеем уникальное отрицательное число, пары которому нет: -0x80000000 => 0x7FFFFFFF + 1 => 0x80000000. Т.е. i == -i, но в то же время не равно 0. Вот и ответ:
int i = Integer.MIN_VALUE;
while (i != 0 && i == -i)
Забавно, но все кроется в компьютерной арифметике. Как получаются отрицательные числа? Изменяем значение каждого бита и прибавляем 1. Это сделано для удобства работы с 0: -0 => 0xFFFFFFFF + 1 => 0. Остальные числа либо отрицательные, либо положительные, но! Отрицательных чисел больше, так как количество комбинаций бит четное, а одна из них занята 0. Мы имеем уникальное отрицательное число, пары которому нет: -0x80000000 => 0x7FFFFFFF + 1 => 0x80000000. Т.е. i == -i, но в то же время не равно 0. Вот и ответ:
int i = Integer.MIN_VALUE;
Автохолодильник
Сегодня ездил в MediaMarkt покупать холодильник для автомобиля. Купил Vitek за 2000р. Выглядит он примерно так.
Иду я с ним на выход. Меня окликает Иван Платонов. Он там с сыном гулял на детской площадке. Он сказал, что подумал сначала, что я торгую, типа, пирожками (в кожанной жилетке, с холодильником, небритый). Вот как обо мне бывшие однокурсники думают!
Еще он рассказал, что его жена с дочкой рисуют возле ИКЕА. Там можно купить глиняную фигурку и расскрашивать ее красками, что там дают. Проходил потом мимо, видел кучу детей с родителями, разрисовывающих свои фигурки, но Елену не увидел, а жаль. Хотел подойти поприветствовать.
В конце сентября повезем от тещи замороженные ягоды, фрукты-овощи. Вот и потестируем, как оно ожлаждает. Можно, конечно, использовать охлаждаемый бардачок в Сценике, но не хотелось бы, чтобы протекло что-нибудь. Не отмоем потом.
Иду я с ним на выход. Меня окликает Иван Платонов. Он там с сыном гулял на детской площадке. Он сказал, что подумал сначала, что я торгую, типа, пирожками (в кожанной жилетке, с холодильником, небритый). Вот как обо мне бывшие однокурсники думают!
Еще он рассказал, что его жена с дочкой рисуют возле ИКЕА. Там можно купить глиняную фигурку и расскрашивать ее красками, что там дают. Проходил потом мимо, видел кучу детей с родителями, разрисовывающих свои фигурки, но Елену не увидел, а жаль. Хотел подойти поприветствовать.
В конце сентября повезем от тещи замороженные ягоды, фрукты-овощи. Вот и потестируем, как оно ожлаждает. Можно, конечно, использовать охлаждаемый бардачок в Сценике, но не хотелось бы, чтобы протекло что-нибудь. Не отмоем потом.
Google Page Creator
Тестировал Google Page Creator, но без новых "экспериментальных" возможностей пока...
Теперь одному человеку разрешается заводить до пяти сайтов. Каждому сайту, естественно, свои настройки. Каждый сайт можно временно скрыть или, например, пометить, как ресурс дя взрослых.
Автоматически для сайта включена опция оптимизации загружаемых изображений. Сжимаются они в JPEG. Поэтому эту опцию рекомендуется отключать, если надо загружать анимированные GIFы, например. Работа с изображениями сделана на 5. Его можно подогнать к рамеру страницы или сделать маленьким. Кроме того, можно настроить яркость, показывать часть изображения, а по ссылке выдавать полное. Все это делается на стороне сервера, а пользователь качает минимум информации.
Но больше всего мне понравилась поддержка мобильных устройств. Сайт автоматически меняет расположение элементов и размеры картинок так, что читать действительно удобно!
Не понравилось, что до сих пор нет поддержки таблиц. Хотелось бы иметь возможность задавать содержимое footer не для каждой страницы, а один раз - для сайта, так как он все равно обычно содержит одинаковую информацию. Так же хотелось бы, чтобы в навигационной панели автоматически создавалось навигационное меню, а то приходится копировать его со страницы на страницу, убирая ссылки на текущую. Надо будет включить "экспериментальные" возможности и проверить, нет ли там того, что мне хочется...
И самый большой минус! После пары часов экспериментов Windows выдало мне предупреждение о том, что кончается память и место на диске C. Я проверил Task Manager - iexplorer.exe скушал 800 мегабайт ОЗУ! Явный memory leak 8(
Результаты экспериментов можно посмотреть здесь. Рекомендую посмотреть с мобильника - выглядит симпатично!
Теперь одному человеку разрешается заводить до пяти сайтов. Каждому сайту, естественно, свои настройки. Каждый сайт можно временно скрыть или, например, пометить, как ресурс дя взрослых.
Автоматически для сайта включена опция оптимизации загружаемых изображений. Сжимаются они в JPEG. Поэтому эту опцию рекомендуется отключать, если надо загружать анимированные GIFы, например. Работа с изображениями сделана на 5. Его можно подогнать к рамеру страницы или сделать маленьким. Кроме того, можно настроить яркость, показывать часть изображения, а по ссылке выдавать полное. Все это делается на стороне сервера, а пользователь качает минимум информации.
Но больше всего мне понравилась поддержка мобильных устройств. Сайт автоматически меняет расположение элементов и размеры картинок так, что читать действительно удобно!
Не понравилось, что до сих пор нет поддержки таблиц. Хотелось бы иметь возможность задавать содержимое footer не для каждой страницы, а один раз - для сайта, так как он все равно обычно содержит одинаковую информацию. Так же хотелось бы, чтобы в навигационной панели автоматически создавалось навигационное меню, а то приходится копировать его со страницы на страницу, убирая ссылки на текущую. Надо будет включить "экспериментальные" возможности и проверить, нет ли там того, что мне хочется...
И самый большой минус! После пары часов экспериментов Windows выдало мне предупреждение о том, что кончается память и место на диске C. Я проверил Task Manager - iexplorer.exe скушал 800 мегабайт ОЗУ! Явный memory leak 8(
Результаты экспериментов можно посмотреть здесь. Рекомендую посмотреть с мобильника - выглядит симпатично!
Подписаться на:
Сообщения (Atom)