Size: a a a

Compiler Development

2020 February 13

E

EgorBo in Compiler Development
9 вс транк
источник

M

MaxGraey in Compiler Development
А, ясно
источник

is

ilya sheprut @optozorax in Compiler Development
приятно читать профессиональные дискуссии, а не срачи про ЯП, спасибо
источник

МБ

Михаил Бахтерев in Compiler Development
MaxGraey
Ты учитывай что это простейший случай. Там может быть и такое:
x % 2 + x % 3 + x % 5 + … == 0
что можно упростить до
x % 30 == 0

И тогда будет выыграш еще более заметным
А такое бывает в коде?
источник

M

MaxGraey in Compiler Development
Михаил Бахтерев
А такое бывает в коде?
Легко! Взять тот же FizzBuzz который встречается в вариантах

if ((number % 3) != 0 && (number % 5) != 0) {}
if ((number % 3) == 0 || (number % 5) == 0) {}

if ((number % 3 + number % 5) == 0) {}
if (((number % 3) | (number % 5)) == 0) {}

и т д
источник

МБ

Михаил Бахтерев in Compiler Development
Хм... Разве так пишут?
источник

M

MaxGraey in Compiler Development
Михаил Бахтерев
Хм... Разве так пишут?
И не только так пишут, там выше уже приводили пример для оптимизации (X % Y) % Y в GCC
источник

СЛ

Сергей Лапынин in Compiler Development
Михаил Бахтерев
Хм... Разве так пишут?
Народ умудряется race condition на javascript сделать... так что такие вещи вообще легко попадаются.
источник

СЛ

Сергей Лапынин in Compiler Development
Без воркеров
источник

KR

K R in Compiler Development
MaxGraey
Легко! Взять тот же FizzBuzz который встречается в вариантах

if ((number % 3) != 0 && (number % 5) != 0) {}
if ((number % 3) == 0 || (number % 5) == 0) {}

if ((number % 3 + number % 5) == 0) {}
if (((number % 3) | (number % 5)) == 0) {}

и т д
Вот то, что с + , если числа большие, то может вызвать переполнение, так?

То есть, всякое

(MAX_INT - 1) % MAX_INT + (2 % 3)
источник

FO

FORTRAN ONE LOVE in Compiler Development
MaxGraey
Ты учитывай что это простейший случай. Там может быть и такое:
x % 2 + x % 3 + x % 5 + … == 0
что можно упростить до
x % 30 == 0

И тогда будет выыграш еще более заметным
Нельзя упростить до x % 30. Не путайте людей
источник

FO

FORTRAN ONE LOVE in Compiler Development
K R
Вот то, что с + , если числа большие, то может вызвать переполнение, так?

То есть, всякое

(MAX_INT - 1) % MAX_INT + (2 % 3)
Здесь ответ 3
источник

KR

K R in Compiler Development
Ну можно подобрать так, чтобы ответ был не 3.
источник

FO

FORTRAN ONE LOVE in Compiler Development
K R
Вот то, что с + , если числа большие, то может вызвать переполнение, так?

То есть, всякое

(MAX_INT - 1) % MAX_INT + (2 % 3)
Стоп. Я идиот. Тут переполнение в любом случае
источник

M

MaxGraey in Compiler Development
FORTRAN ONE LOVE
Нельзя упростить до x % 30. Не путайте людей
Это почему же? Можете проверить на все диапазоне [0, 2^32 - 1] это равнозначные выражения
источник

KR

K R in Compiler Development
Вот, подобрал

(INT_MAX - 1) % INT_MAX + (INT_MAX - 1) % INT_MAX + (4 % 5) == 0
источник

KR

K R in Compiler Development
Хотя, очевидно, ни один остаток не ноль.
источник

KR

K R in Compiler Development
Получается забавно - с signed int можно оптимизировать два слагаемых, но нельзя три.
источник

M

MaxGraey in Compiler Development
K R
Вот, подобрал

(INT_MAX - 1) % INT_MAX + (INT_MAX - 1) % INT_MAX + (4 % 5) == 0
А теперь внимательно взгляните на пример
i % 3 + i % 2 + i % 5 == 0
Стало быть правильных вариант
(INT_MAX - 1) % 3 + (INT_MAX - 1) % 2 + (INT_MAX - 1) % 5 == 0

А что вы написали я не понимаю
источник

KR

K R in Compiler Development
Нет, когда числа маленькие, тогда никакого переполнения нет, и всё работает.
источник