Здравствуйте, Alexander G, Вы писали:
N>>Именно в C и C++ у знаковых принципиально лучше с точки зрения производительности, что позиция, что программист всегда позаботился о переполнениях, позволяет массу оптимизаций, типа замены a+1>a на true. Были отзывы о получении 20-50% выигрыша на этом в отдельных характерно интересных случаях.
AG>Ха, интересно, про неопределённость роловера для знаковых и определённость для беззнаковых уловил.
AG>Интересно, как далеко можно пойти на этом неопределённом переполнении знаковых, но принял к сведению.
Ну вот
пример набора оптимизаций. Реально их ещё больше.
AG>(MSVC похоже никуда не идёт, он тупо делает реальное сравнение в обоих случаях a + 1 > a)
Ну, похоже, MSVC сильно отстал. Хотя это какого года версия? Они с 2015 кричат про переход на SSA, там многое должно заметно поменяться.
N>>Что сравнивали-то? Intel рисует (почти) противоположное — для длинного умножения времена одинаковы, а для короткого (которому пофиг на знак) на 1-2 такта меньше (3 вместо до 5).
AG>Обычное деление достаточно больших чисел int64_t / uint64_t, компиляция MSVC x64, беззнаковые ощутимо быстрее. Нужно воспроизвести?
Это уже речь про деление, а перед этим было про умножение
Вообще, если настроение, киньте код, я сверю в своих условиях.
AG>>>С точки зрения корректности, знаковые как бы ограждают от одного типа ошибок (отрицательное число -> переполнение), но вносят другие (отрицательное число -> выход за диапазон), шило на мыло.
N>>А у положительного переполнение у обоих. А так как мелкие числа, включая отрицательные, чаще, чем крупные, то знаковые числа заведомо выигрывают.
AG>В положительную сторону переполняются одинаково. Что до отрицательной, неожиданное отрицательное число, чуть-чуть вышедшее за диапазон, даёт больше вреда, чем такое же положительное, при тех же условиях вышедшее в огромные значения.
А как может положительное "выйти в огромные значения", если нет перехода через границу?
А если есть переход или хотя бы подозрение на него...
Опять же
похвалю GCC и Clang — совершенно гениальная придумка (особенно если учесть вариант с тремя разными типами), такое в стандарты надо было ещё лет 20 назад вогнать. И от MS, боюсь, ещё долго не дождаться.