Size: a a a

Compiler Development

2020 April 06

S

S.Atan in Compiler Development
То есть, вынос за скобки, перестановка слагаемых, наоборот выделение общего множителя и другое - перестановка узлов дерева...

Ну хорошо, отвечать не буду.
источник

AT

Alexander Tchitchigin in Compiler Development
S.Atan
То есть, вынос за скобки, перестановка слагаемых, наоборот выделение общего множителя и другое - перестановка узлов дерева...

Ну хорошо, отвечать не буду.
Ещё раз спасибо. 😊
источник

VM

Victor Miasnikov in Compiler Development
Igor 🐱 Jirkov
Это про математику и железки. А если мы добавляем сверху язык программирования,  то его модель арифметики -- это уже третья сущность, которая может не совпадать с железками, и в идеале должна быть полностью описана в стандарте.
А интервальная арифметика не спасёт ли?
источник

VM

Victor Miasnikov in Compiler Development
Alexander Tchitchigin
Этот вопрос никто не задавал. Спасибо, но можете не отвечать на него. 😉
Т.е. Вам лично это скучно?
источник

AT

Alexander Tchitchigin in Compiler Development
Victor Miasnikov
Т.е. Вам лично это скучно?
Для тех, кто не в курсе связи оптимизаций с трансформациями деревьев, в закрепе есть ссылка на список литературы. 😉
источник

VM

Victor Miasnikov in Compiler Development
Я бы не сказал, что вопросы арифметики решены в mainstream

(

В списке под сотню книг?

)
источник

MM

Mikhail Maltsev in Compiler Development
Igor 🐱 Jirkov
От перестановки слагаемых сумма не меняется, когда речь идет, например, о целых числах.  А если речь идет о машинной арифметике, то целых чисел там нет. Есть целые по модулю, или с насыщением, или машинные опять же с плавающей точкой, которые не удовлетворяют, кажется, очень многим аксиомам о вещественных числах (коммутативность, ассоциативность, плотность например). Поэтому подход со сравнением "математики " и "реальной жизни " тут совершенно порочен, так как вы сравниваете реальную жизнь с неподходящей для её моделирования математикой.
Представление чисел в компьютере - это модель чисел в математике (целых и действительных). Так что IMHO имеет смысл переносить знания о числах в математическом смысле на компьютерную реализацию, замечая различия там где они есть. В некоторых случаях для программиста различия несущественны, поэтому существуют всякие настройки компилятора, типа -ffast-math (которые делают вид, что переполнений не существует, числа с плавающей точкой ассоциативны, а x/y это то же самое что x*(1/y)
источник

AG

Alex Gryzlov in Compiler Development
мне кажется Игорь говорил как раз противоположное - что нужно строить более сложную математическую модель компьютерной реализации
источник

МБ

Михаил Бахтерев in Compiler Development
Mikhail Maltsev
Представление чисел в компьютере - это модель чисел в математике (целых и действительных). Так что IMHO имеет смысл переносить знания о числах в математическом смысле на компьютерную реализацию, замечая различия там где они есть. В некоторых случаях для программиста различия несущественны, поэтому существуют всякие настройки компилятора, типа -ffast-math (которые делают вид, что переполнений не существует, числа с плавающей точкой ассоциативны, а x/y это то же самое что x*(1/y)
Модель - это то, что удовлетворяет исходной логической системе. Поэтому, нет, не модель. Компьютер выполняет набор преобразований со строгими математическими свойствами, и уже эти свойства можно учитывать в алгоритмах при доказательстве их математических свойств. В серьёзных пакетах всё так и делают: строят оценки достоверности.

Обычно, все на это забивают. Но, как один из специалистов по IEEE754 заметил, результаты 90% вычислений никому не нужны :)
источник

МБ

Михаил Бахтерев in Compiler Development
В автопроме, кстати, float-ы не любят и предписывают использовать fixed-point арифметику, по-возможности.
источник

VM

Victor Miasnikov in Compiler Development
Михаил Бахтерев
В автопроме, кстати, float-ы не любят и предписывают использовать fixed-point арифметику, по-возможности.
Вот, вот: это не математика как наука "плохая".

Вот в Мир-1 и Мир-2 разве "арифметика по модулю" была?

Нет - нормальная, "длинная"
источник

МБ

Михаил Бахтерев in Compiler Development
Victor Miasnikov
Вот, вот: это не математика как наука "плохая".

Вот в Мир-1 и Мир-2 разве "арифметика по модулю" была?

Нет - нормальная, "длинная"
Ну, кажется, что это больше от языка зависит, а не от машины. Есть же языки, где длинные представления - по-умолчанию, а короткие - это либо консервативные оптимизации, либо по запросу программиста. И работает, хоть на Z80, хоть на x86-64.
источник

VM

Victor Miasnikov in Compiler Development
Всё-таки, поддержка со стороны "железа" не помешает -)
источник

M

MaxGraey in Compiler Development
Victor Miasnikov
Вот, вот: это не математика как наука "плохая".

Вот в Мир-1 и Мир-2 разве "арифметика по модулю" была?

Нет - нормальная, "длинная"
Так в Мир-1 и Мир-2 это же небыло на уровне железа (ЭВМ). А так BigInt даже в JavaScript сегодня есть, гого это удивляет? В Python и Ruby это вообще автоматичемки
источник

VM

Victor Miasnikov in Compiler Development
Метод не столь важен, как цель: отсутствие целочисленных переполнений.

( или хотя бы гарантированный exception)
источник

M

MaxGraey in Compiler Development
Михаил Бахтерев
В автопроме, кстати, float-ы не любят и предписывают использовать fixed-point арифметику, по-возможности.
А зачем для engine control unit (ECU) к примеру FPU? Там не использут fp потому что они не нужны, А вот для автопилотов и алгоритмов deep learning обычно использутт bfloat16 вообще, им вполне 16-бит хватает.
источник

МБ

Михаил Бахтерев in Compiler Development
MaxGraey
А зачем для engine control unit (ECU) к примеру FPU? Там не использут fp потому что они не нужны, А вот для автопилотов и алгоритмов deep learning обычно использутт bfloat16 вообще, им вполне 16-бит хватает.
Ну. Я не специалист. Читал индустриальные рекомендации по разработке ПО. Они не только для ECU, но и для систем тестирования при старте такие. Где-то, видимо, нужна fp
источник

PS

Peter Sovietov in Compiler Development
Victor Miasnikov
Метод не столь важен, как цель: отсутствие целочисленных переполнений.

( или хотя бы гарантированный exception)
На мой взгляд, интересны-то как раз методы (в компиляторном контексте: абстрактная интерпретация, SMT-решатели...).
Цель же можно поставить под сомнение. При разработке встраиваемых систем иной раз приходится использовать алгоритмы, которые явно эксплуатируют эффект целочисленного переполнения, арифметику с насыщением и проч.
источник

p

polunin.ai in Compiler Development
Только так манипулировать нужно очень осторожно, потому что можно получить переполнение или отрицательное число в беззнаковом числе, там где это не ожидалось😊
источник

PS

Peter Sovietov in Compiler Development
Михаил Бахтерев
В автопроме, кстати, float-ы не любят и предписывают использовать fixed-point арифметику, по-возможности.
В MISRA C такого я не припомню. В целом, конечно, fixed-арифметика имеет ряд преимуществ (особенно, если чип у нас без FPU), но хороший разработчик, который умеет аккуратно работать с фиксированной запятой, стоит гораздо дороже обычного разработчика :)
И здесь как раз интересно опять вспомнить, зачем мы собрались. Очень перспективны методы автоматической трансляции из исходного float-представления выражений в машинное fixed-представление.
источник