Здравствуйте, vdimas, Вы писали:
V>Мы уже обсуждали это не раз, и ты как раз отвечаешь на суть того, с чем все (или почти все) согласились — "разница" должна быть знаковой.
Угу. Гляжу в книгу, вижу фигу.
V>Я ж показал рядом, как можно корректно расписать взаимодействие знаковых и беззнаковых чисел:
Можно, но арифметика
уже устроена определённым образом. И её поменять на вашу, увы, не получится.
V>Тебе заранее на всё ответили. ))
V>Это до тех пор, пока нет приличного оптимизатора.
Нет, это напрямую запрещено стандартом.
V>А когда появится, то будет что-то типа такого поведения под x64:
V>V> public static void Main(string[] args)
V> {
V> static bool IsMax(int i) {
V> return (i + 1u) < i;
V> }
V> Console.WriteLine(IsMax(0x7FFFFFFF));
V> }
V>
V>бгг...
Никогда такого поведения не будет. И приведённое вами поведение чётко описано в стандарте. Поэтому вот этот код даст false хоть в первом дотнете, хоть в девятом, и вне зависимости от дебаг/релиз режима. И в любой следующей версии дотнета продолжит выдавать false.
А код, где к i прибавляется знаковая единица, продолжит выдавать true. Ваши бугагашечки — просто роспись в некомпетентности, увы.
V>Это официальная причина от непосредственных разработчиков дотнета.
И с кем из непосредственных разработчиков дотнета вам довелось пообщаться?
V>Извини, но выдать такое мог только человек с не очень большим опытом в написании программ.
V>Поэтому, важность детерминированного поведения в случае знакового переполнения примерно нулевая.
V>Да всем насрать, собсно.
V>Я даже не могу придумать реальной задачи, которую стоит решать таким образом, потому что в таких задачах всегда удобней беззнаковое, т.е. просто набор бит.
V>И ты тоже не придумаешь такой задачи, просто разводишь своё обычное пустопорожнее ля-ля-ля.
Задачу с усреднением трёх интов, я так понимаю, вы тактично решили своим вниманием обойти.
V>Любая непродуманная дичь вызвала бы бесконечную по объёму реакцию.
Ну так она и вызывает. Просто вы в своём тепличном мирке ничего этого не видите.