- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
class Program
{
static int x = 0;
static int f()
{
x = x + 10;
return 1;
}
public static void Main()
{
x += f();
System.Console.WriteLine(x);
}
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+121
class Program
{
static int x = 0;
static int f()
{
x = x + 10;
return 1;
}
public static void Main()
{
x += f();
System.Console.WriteLine(x);
}
}
Следите за руками! Чему же в итоге равно x?
Проверить себя: http://ideone.com/v8rktM
Источник: http://blogs.msdn.com/b/oldnewthing/archive/2014/08/14/10549885.aspx
>C++ evaluates the function first before capturing "X".
Or more exactly, a particular implementation of C++ on this particular source code on this particular day of the week happened to evaluate the function first.
Полечить перестановкой:
Математик не знает о побочных эффектах
он увидит, что складываются 2 целых числа
правда что ли?
Расскажи это математикам, которые полвека пишут на фортране.
Ах да, я забыл, нельзя относиться сразу к двум множествам.
Кегдан, сев за клавиатуру, внезапно перестал быть особью мужского пола.
Способностью внушения джедаи обладают.
В доспехах, винтовка со мной
От жажды мозги не на месте
Песок, Татуин - вот отстой
Тут едет крутая тачила
Какой то дедок за рулем
Пердун улыбается мило
Два дройдека, парень при нем
Братюна давай чин о чину -
"Где дройдеков, старый, украл?
Зачем ты, седая скотина
Себе гея-мальчика снял?"
А дед лишь рукою колышит
И молвит - "ну что ты, сынок
Не этих ты дройдоков ищешь
И мне ни к чему новый срок"
Братюня от солнца поехал -
"Езжай, говорит, старый хрен"
Парнишка трясется от смеха
Менты, мол, тупые совсем
Я мне - больше всех что ли надо
Все это говно разгребать?
Пошло б оно нахер, ребята
С дибилом в дозоре стоять
Экспресс хуерга
Причём тут это, поехавший?
Там нет хуйни в виде сайд-эффектов и мутабельных переменных.
Гость, вращайте барабан!
Передайте банку нам
> там нет такой хуйни как некоммутативное сложение целых чисел
Не знаю, не знаю. У математиков в хаскеле ещё некоммутативное умножение матриц и некоммутативное возведение в степень.
Как на таком языке пишут - не знаю...
Все просто, берешь алгем и читаешь;)
число - это число
а матрица из одного элемента это
data Matrix a = Matrix1 {getElement::a}| -- и так далее
Но число и в математике живёт так же, как и маленькая матрица. И сложение то же, и умножение.
А сколько слёз и боли вызывали сайд-эффекты инкрементов и присваиваний?
PS Кто порождает шаред-статик-переменные, и не защищает их лочкой или атомиком - должен страдать.
такую хрень в любом языке можно сделать, результат абсолютно непредскауем
Если дробная часть a находится на равном расстоянии от двух целых чисел (четного и нечетного), возвращается четное число.
http://msdn.microsoft.com/ru-ru/library/wyk4d9cy%28v=vs.110%29.aspx
В среднем, в среднем.
Округление «до ближайшего чётного» исходит из предположения, что при большом числе округляемых значений, имеющих 0,5 в округляемом остатке, в среднем половина из них окажется слева, а половина — справа от ближайшего чётного, таким образом, ошибки округления взаимно погасятся. Строго говоря, предположение это верно лишь тогда, когда набор округляемых чисел обладает свойствами случайного ряда, что обычно верно в бухгалтерских приложениях, где речь идёт о ценах, суммах на счетах и так далее.
А следствия этого факта можно найти в других местах.
Хотя про то, что это banker's rounding масдаевцам стоило упомянуть.