- 1
- 2
- 3
- 4
- 5
- 6
- 7
int k = 50;
while (true){
i = i + i;
System.out.println(i);
k--;
if (k<0) break;
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+68
int k = 50;
while (true){
i = i + i;
System.out.println(i);
k--;
if (k<0) break;
}
http://stackoverflow.com/questions/24173463/why-does-i-i-i-give-me-0
bormand 12.06.2014 10:22 # 0
3.14159265 12.06.2014 10:41 # +1
В цикле? for (int k=50;k>=0;--k){...}
bormand 12.06.2014 10:50 # +2
Ну столкнулся человек первый раз с ограничениями целых чисел, ну что ж теперь. Все через это когда-то проходили.
kegdan 12.06.2014 11:14 # +1
kegdan 12.06.2014 11:22 # 0
так красивше хоть и с переполннением
bormand 12.06.2014 11:35 # 0
Почему бы не написать это i+=i строчкой выше? Штуки в духе while (*dst++ = *src++); писали в далёкие сишкоблядские времена, когда оптимизаторы еще только зарождались...
> хоть и с переполннением
Ну ради них весь этот код и существует, все нормально.
kegdan 12.06.2014 11:49 # 0
1024-- 12.06.2014 12:10 # 0
Не сразу понял, что это не Java. Только после того, как мне запретили написать final int x = 1 / i;
Хотя, const int x = 1 / i; мне тоже запретили написать, наркоманы.
В нормальных языках дают. https://ideone.com/0sxzUE
Только там приходится этот x использовать, чтобы его не сомтимизировали (привет, Хаскель!)
gost 12.06.2014 11:55 # 0
kegdan 12.06.2014 12:26 # 0
bormand 12.06.2014 13:01 # +3
Любой уважающий себя оптимизатор заменит a*=2 на a+=a или a<<=1, а на x86 даже изъебнется и перепишет умножения на 3, 5, 9 и т.п. через lea. Поэтому, имхо, надо писать наиболее подходящий по семантике вариант - если работаем с битами и логическими операциями - сдвиги, если увеличиваем что-то вдвое - умножение.
P.S. Тот же g++ даже b = a*i в циклах умудрялся заменять на b += a:
kegdan 12.06.2014 13:03 # 0
bormand 12.06.2014 13:07 # +1
Просто его матрица and'ов и сеть однобитовых сумматоров жрут довольно много транзисторов, и для чего-то больше 32-64 бит строить такую схему не особо выгодно...
kegdan 12.06.2014 13:16 # 0
как то так. У меня возник страшный вопрос - а можно так же но без do?
всмысле do - это же императивщина, как переделать в чистую функциональшину?
bormand 12.06.2014 13:22 # 0
Как-то так, наверное: https://ideone.com/UGC5jD
kegdan 12.06.2014 13:25 # 0
bormand 12.06.2014 13:29 # 0
Ну в чистом коде ты вывод и не сделаешь. Так что только так, если хочется отделить чистую часть от I/O.
Кстати, в хаскеле есть прикол - часто удобней работать с бесконечными списками, а потом обрезать их, нежели работать сразу с конечными.
kegdan 12.06.2014 13:32 # 0
evg_ever 12.06.2014 13:35 # 0
kegdan 12.06.2014 13:37 # 0
gost 12.06.2014 14:10 # 0
< шепелявит >Ты из какого года, милок? Из 2000, нябось?
kegdan 12.06.2014 14:13 # 0
L5D 25.08.2021 05:13 # 0