Size: a a a

Compiler Development

2020 May 19

M

MaxGraey in Compiler Development
Вот кстати с бинарным поиском на схеме:
http://programmingpraxis.codepad.org/M5U3EZEv
источник

MM

Mikhail Maltsev in Compiler Development
Артём ИМХО хорошую идею предложил:
a_next = a * radix;
if (a_next < a)
  // overflow
else
  a = a_next;
источник

AD

Artyom Drozdov in Compiler Development
Mikhail Maltsev
Артём ИМХО хорошую идею предложил:
a_next = a * radix;
if (a_next < a)
  // overflow
else
  a = a_next;
а вот тут я бы не был бы так уверен, не всегда a_next < a будет, кажется
источник

MM

Mikhail Maltsev in Compiler Development
Да, похоже не всегда
источник

AD

Artyom Drozdov in Compiler Development
но таблица на 32 значения кажется совсем немного, нет?
источник

AD

Artyom Drozdov in Compiler Development
можно ее прямо в код вкомпилить
источник

MM

Mikhail Maltsev in Compiler Development
Ещё можно умножать в 2 этапа:
a  = 2^32*x+y
a*radix = ((x*radix)<<32) + y*radix

Если x и y 64-битные, то переполнение возможно только в сдвиге и сложении, это легко проверить
источник

AD

Artyom Drozdov in Compiler Development
Mikhail Maltsev
Ещё можно умножать в 2 этапа:
a  = 2^32*x+y
a*radix = ((x*radix)<<32) + y*radix

Если x и y 64-битные, то переполнение возможно только в сдвиге и сложении, это легко проверить
можно, но зачем?) одно сравнение всё равно побеждает)
источник

AD

Artyom Drozdov in Compiler Development
вообще когда возможно переполнение? когда результат функции будет максимальным, правильно?
источник

AD

Artyom Drozdov in Compiler Development
если это так, то действительно кажется достаточно одной проверки еще до запуска цикла
источник

M

MaxGraey in Compiler Development
Artyom Drozdov
вообще когда возможно переполнение? когда результат функции будет максимальным, правильно?
Нет, переполнение может быть не только вы этом случае. В том то и вся проблема
источник

AD

Artyom Drozdov in Compiler Development
MaxGraey
Нет, переполнение может быть не только вы этом случае. В том то и вся проблема
а можно пожалуйста пример?
источник

M

MaxGraey in Compiler Development
Да полно примеров:
ilogb(0xfffffffffffffffe, 3)
источник

AD

Artyom Drozdov in Compiler Development
ну
источник

AD

Artyom Drozdov in Compiler Development
ilogb(u64(-1), 3) чему равно?
источник

AD

Artyom Drozdov in Compiler Development
вот тому же равен твой пример
источник

AD

Artyom Drozdov in Compiler Development
максимальному значению для конкретного base
источник

AD

Artyom Drozdov in Compiler Development
т.е. достаточно одной проверки
источник

M

MaxGraey in Compiler Development
Ну смотри там t <= n, при этом t = t * base будет переполняться при любом слцчае когда clz(t) + clz(base) < 63 и даже иногда при < 62. А таких случаев полно
источник

AD

Artyom Drozdov in Compiler Development
MaxGraey
Ну смотри там t <= n, при этом t = t * base будет переполняться при любом слцчае когда clz(t) + clz(base) < 63 и даже иногда при < 62. А таких случаев полно
можно пожалуйста 1 конкретный пример? как-то не получается у меня осознать
источник