Информация об изменениях

Сообщение Re[29]: Carbon от 22.04.2024 10:21

Изменено 22.04.2024 12:01 vdimas

Re[29]: Carbon
Здравствуйте, Sinclair, Вы писали:

S>Следите за руками: в дотнете прибавление единицы к int 0x7FFFFFFF даёт int 0x80000000 (overflows are ignored). Здесь нет никаких бит для отбрасывания, т.к. весь результат fits in the destination type.

S>А в C++ такое прибавление даёт undefined behavior.

Продолжаешь пытаться показывать фокусы? ))
Если в этот же код подать другое число, то может быть отбрасывание.

========
Это даже уже не фокус у тебя, это мошенничество в расчёте на однобитную тусовку, один завсегдатай уже отметился.

Тебе же уже говорилось, что промежуточные вычисления в более широких типах допустимы прямо по стандарту.

И раздражает твоё непонимание понятия UB.
UB не означает ошибку, UB означает неопределённое поведение.

Т.е. вот у тебя в формуле встречается участок (a+b)/2, в котором может наступить переполнение и выдача ошибочного результата.
Разумеется, до факта переполнения формула остаётся работоспособной.
А после переполнения — неопределено, т.е. может остаться работоспособной, а может и не остаться.
На этот эффект ты и нарвался в своём примере.

И что ты рядом бил себя в грудь, что в дотнете формула достоверно будет неработоспособной — это потому что дотнет пока мест всё еще детская игрушка.
Займутся им всёрьез — будет так же.

И значешь почему?
Потому что принципиально современные разрабы-оптимизаторы кучкуются только в С++, и других взять тупо неоткуда. ))

Собсно, уже в дотнет нагнали плюсовиков и те стали приводить сие полумёртвое поделие в норму.
Re[29]: Carbon
Здравствуйте, Sinclair, Вы писали:

S>Следите за руками: в дотнете прибавление единицы к int 0x7FFFFFFF даёт int 0x80000000 (overflows are ignored). Здесь нет никаких бит для отбрасывания, т.к. весь результат fits in the destination type.

S>А в C++ такое прибавление даёт undefined behavior.

Продолжаешь пытаться показывать фокусы? ))
Если в этот же код подать другое число, то может быть отбрасывание.

========
Это даже уже не фокус у тебя, это мошенничество в расчёте на однобитную тусовку, один завсегдатай уже отметился.

Тебе же уже говорилось, что промежуточные вычисления в более широких типах допустимы прямо по стандарту.

И раздражает твоё непонимание понятия UB.
UB не означает ошибку, UB означает неопределённое поведение в случае ошибки.

Т.е. вот у тебя в формуле встречается участок (a+b)/2, в котором может наступить переполнение и выдача ошибочного результата.
Разумеется, до факта переполнения формула остаётся работоспособной.
А после переполнения — неопределено, т.е. может остаться работоспособной, а может и не остаться.
На этот эффект ты и нарвался в своём примере.

И что ты рядом бил себя в грудь, что в дотнете формула достоверно будет неработоспособной — это потому что дотнет пока мест всё еще детская игрушка.
Займутся им всёрьез — будет так же.

И значешь почему?
Потому что принципиально современные разрабы-оптимизаторы кучкуются только в С++, и других взять тупо неоткуда. ))

Собсно, уже в дотнет нагнали плюсовиков и те стали приводить сие полумёртвое поделие в норму.