- 1
- 2
- 3
- 4
- 5
uint16_t min_id, next_id, id;
if (id - min_id < next_id - min_id) {
// ...
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+136
uint16_t min_id, next_id, id;
if (id - min_id < next_id - min_id) {
// ...
}
Сегодня обнаружил в своем, не покрытом тестами, говнокоде этот эпик-фейл.
Окрестосишкоблядился, что называется, по полной программе.
Условие должно было проверять, лежит ли id в диапазоне [min_id; next_id) с учетом перехода через 0.
Например min_id = 0xFFFE, next_id = 0x0003, id = 0x0002 должно вернуть true, а min_id = 43, next_id = 44, id = 42 - false.
defecate-plusplus 07.04.2013 23:50 # +1
оказывается средствами iostream/iomanip невозможно вывести 3 как 0x0003
http://liveworkspace.org/code/3EwjLw$0
roman-kashitsyn 08.04.2013 00:19 # +7
defecate-plusplus 08.04.2013 00:52 # +2
3.14159265 08.04.2013 14:46 # +1
Православый printf хоть не идеален, но гораздо удобней.
bormand 08.04.2013 14:55 # 0
3.14159265 08.04.2013 15:49 # +2
bormand 08.04.2013 17:33 # +7
Бустовик бустовика видит издалека.
Буст что дышло - куда повернешь, туда и вышло.
На буста надейся, а сам не плошай.
3.14159265 08.04.2013 17:43 # +2
Буст - всему голова.
Джва креста - пара.
За крещеного двух некрещеных дают.
bormand 08.04.2013 17:46 # +3
Не все то буст, что крестоблядство.
3.14159265 08.04.2013 17:47 # +4
bormand 08.04.2013 17:48 # +5
Что дефекейту буст, то Тарасу смерть.
3.14159265 08.04.2013 17:50 # +9
bormand 08.04.2013 17:58 # +2
3.14159265 08.04.2013 18:04 # +5
В крестах и грабли стреляют.
3.14159265 08.04.2013 18:06 # +4
3.14159265 08.04.2013 18:43 # +3
Одно спасенье - крест да буст-либа.
3.14159265 08.04.2013 18:58 # +5
bormand 08.04.2013 19:08 # +4
3.14159265 08.04.2013 19:13 # +4
В крестах хорошо, а с бустом лучше.
3.14159265 08.04.2013 20:11 # +3
3.14159265 08.04.2013 17:57 # +4
Или грабли в крестах, или проект в бустах.
TarasB 08.04.2013 15:53 # −4
3.14159265 08.04.2013 19:44 # +3
bormand 08.04.2013 20:54 # +6
3.14159265 08.04.2013 21:06 # +3
3.14159265 08.04.2013 21:08 # +2
bormand 08.04.2013 21:11 # +6
3.14159265 08.04.2013 21:15 # +2
3.14159265 08.04.2013 21:14 # +3
bormand 09.04.2013 10:27 # +3
3.14159265 09.04.2013 14:47 # +3
roman-kashitsyn 09.04.2013 15:08 # +4
3.14159265 09.04.2013 15:16 # +2
3.14159265 09.04.2013 14:51 # +5
геймдев
3.14159265 09.04.2013 15:12 # +1
Модератор
bormand 09.04.2013 15:15 # +2
Исходники буста
3.14159265 09.04.2013 15:18 # +2
капча
3.14159265 09.04.2013 18:07 # +2
Копипаста
LispGovno 09.04.2013 21:38 # 0
govnomonad 09.04.2013 15:23 # +1
3.14159265 09.04.2013 15:27 # +2
Кормишь его он живет, а игноришь он уйдёт.
3.14159265 09.04.2013 15:32 # +3
Срач разжигает, кресты с бустом обсирает.
3.14159265 09.04.2013 16:02 # +2
bormand 08.04.2013 05:16 # 0
А где коммент, который ты писал?
roman-kashitsyn 08.04.2013 07:40 # +3
guest 09.04.2013 02:42 # +1
3.14159265 08.04.2013 16:39 # +2
bormand 09.04.2013 15:16 # 0
TarasB 09.04.2013 15:34 # 0
bormand 09.04.2013 15:38 # 0
TarasB 09.04.2013 15:51 # 0
bormand 09.04.2013 15:52 # 0
TarasB 09.04.2013 16:04 # +3
http://ideone.com/TSVH8m
ну ладно, я же явно указал надтип
http://ideone.com/9Smtb6
тут хз вообще это Range Checking Error, из-за опций она отключена, за результат язык ответственности не несёт
http://ideone.com/wpF2k4
То, что ты хотел
3.14159265 09.04.2013 16:08 # 0
http://ideone.com/5JJET5
Вот, блядь, как нужно делать.
bormand 09.04.2013 16:14 # +1
3.14159265 09.04.2013 16:33 # 0
bormand 09.04.2013 16:08 # +1
А вот это очень годная фишка. Именно это я и имел в виду, когда писал код.
TarasB 09.04.2013 16:15 # +2
bormand 09.04.2013 16:18 # 0
А по кривым модулям умеет считать? Типа mod 7 или mod 42?
defecate-plusplus 09.04.2013 16:24 # 0
TarasB 10.04.2013 10:05 # 0
LispGovno 10.04.2013 11:07 # 0
А почему они кривые?
bormand 10.04.2013 11:16 # +1
nonbinary
LispGovno 10.04.2013 11:08 # 0
bormand 09.04.2013 16:02 # +2
Мда.
defecate-plusplus 09.04.2013 16:15 # +1
http://liveworkspace.org/code/4CAiXx$0
roman-kashitsyn 09.04.2013 15:43 # +1
bormand 09.04.2013 15:50 # +2
Решили сэкономить один and на процессорах не умеющих в мелочь, и всю мелочь превратили в инт (или уинт если в инт не войдет без потерь).
Поэтому, кстати, если поменять 16 на 32, то при sizeof(uint32_t) == sizeof(int) этот код будет работать без каких-либо проблем.
3.14159265 09.04.2013 15:53 # 0
Какой ужас.
> этот код будет работать без каких-либо проблем.
Пока кто-то не решит "давно наступила 64-битная эра"
А компилер ворнингов не выдавал о неявном преобразовании типа?
bormand 09.04.2013 15:57 # 0
3.14159265 09.04.2013 16:00 # +1
Таки хорошо что в жабе unsigned выпилили.
bormand 09.04.2013 16:05 # +1
Да-да. После таких приколов начинаешь понимать почему. Кстати его отсутствие там не особо и напрягает. Байтоебства и без него отлично делаются. А если нужны числа из диапазона 2^31..2^32, то в 80% там лучше смотрится long или что-нибудь с плавающей точкой.
3.14159265 09.04.2013 16:14 # 0
Да. Но в жабе есть свои приколы (гораздо более очевидные):
http://ideone.com/gLRyhT
http://ideone.com/uhFaKp
bormand 09.04.2013 16:16 # 0
Толку то. Вон я выше портанул свой код на шарп. Точно такой же баг без единого ворнинга.
> В жабе есть свои приколы
Мда. А почему в версии с += нет проверки?
3.14159265 09.04.2013 16:19 # 0
http://ideone.com/dPpjlM
bormand 09.04.2013 16:22 # 0
Так так я и в сишке могу. И оно, о боже, внезапно начнет правильно работать.
Если я засуну результат вычитания двух ушортов в ушорт, то несмотря на промежуточные касты я получу то что и хотел.
А если я засуну инт в ушорт, то насколько помню gcc выдаст ворнинг.
Так что шарп в пролете ;)
3.14159265 09.04.2013 16:32 # 0
И я бы написал (знаю, задним умом все сильны, но я не обманываю) код так:
=> , то есть нужно описать 2 условия несмотря на кажущуюся очевидность первого.
И был бы уверен что оно железно.
bormand 09.04.2013 16:35 # 0
i=1 a=1 b=2 вернет false, хотя 1 принадлежит [1; 2). Так что тут не i > 0, а i >= 0, а его для ушорта можно опустить.
3.14159265 09.04.2013 16:35 # 0
Вот я и говорю - не надо опускать.
Так надежнее.
bormand 09.04.2013 16:39 # 0
bormand 09.04.2013 16:48 # +2
P.S. А тесты (которые я все-таки написал) оно проходит т.к. что при выходе за диапазон, что в таком случае один хер возвращается 0, и код по счастливой случайности работает корректно.
3.14159265 09.04.2013 16:51 # +1
Только об этом писал, что 1 переполняет.
>Пора завязывать с байтоебствами
Не пора. Грамотное байтоебство в дельфе не тонет и в крестах не сбоит.
Ну и тесты конечно же. Куда без них?
guest 09.04.2013 17:26 # −1
Ты же знаешь, что не тонет на самом деле.
roman-kashitsyn 09.04.2013 17:24 # +2
Мне кажется, или высокие абстракции работают тут лучше всякого битолюбства? P.S. Кто-нибудь, уберите от меня эти шаблоны, пока ещё не поздно...
defecate-plusplus 09.04.2013 18:00 # +2