Информация об изменениях

Сообщение Re[7]: Fixed-point to string от 01.10.2023 15:11

Изменено 01.10.2023 15:13 fk0

Re[7]: Fixed-point to string
Здравствуйте, cppguard, Вы писали:

C>Здравствуйте, fk0, Вы писали:


fk0>> Но компилятор же небось инлайнит как (a*(2^8) + b) * (c*(2^8) + d) = a*c*(2^16) + (b*c + a*d)*(2^8) + b*d

fk0>>(4 умножения, два сдвига и три сложения). Или по крайней мере вызывает встроенную функцию.
fk0>>Последнее кстати плохо (т.к. регистровый аллокатор уже не понимает какие регистры испортятся и вынужден
fk0>>что попало заталкивать в стек).
fk0>> А какой смысл в "фиксированной точке" и 8-битных числах??? Любые практические данные
fk0>>которые потребуется обрабатывать едва ли влезут в 16 бит. Хорошо бы иметь 24. А 32 может быть даже много.
fk0>>Звук например. Сам-то прекрасно в 12 бит влезает, но какая-то обработка в два раза больше потребует.
fk0>>Например, цифровой фильтр который выделяет узкую полосу частот. Помню сигнал с акселерометра обсчитывал.
fk0>>Там и 8 бит на входе более чем, но нужно же считать векторные произведения, потом тригонометрические функции,
fk0>>в итоге 16 не хватает для получения приемлемой точности. Вот 24 в самый раз.
C>Странные вопросы, потому что Я вроде уже несколько раз писал слово "AVR". Иногда полезно проветривать комнату и открывать окно, чтобы увидеть что-то кроме x86-64.

Да хоть PIC18F2520! Лишь бы не 16F628!
Я утверждаю, что почти не вижу смысла в 8 битах вообще, независимо от того, на какой платформе.
Все практически существующие виды аналоговых данных в 8 бит едва ли лезут. Кроме каких-то очень узко специальных случаев.
Вроде алгоритма им. АОНа и т.п. Впрочем там фиксированная точка не нужна.

fk0>> Просто нужно нормально писать код. Что на C, что на C++. Со временем пишешь сам так, что компилятор

fk0>>варнингов даже не даёт. Обычный набор варнингов для GCC/Clang: -Wall -Wextra -Wcast-align -fstrict-aliasing,
fk0>>ещё -Wconversion, но не все, от проекта зависит. И полезно прогонять с -fsanitize=undefined.
C>Это позиция вчерашнего студента. Сходи в большие корпорации, и посмотри, сколько там предупреждений компилятора, и какие проверки отключены.

Уже сходил. Последний раз в пятницу. Ещё понедельник тащиться. Примерно как я и описываю, хотя конечно от проекта зависит.
Но пренебрегание варнингами скорей сулит неожиданные проблемы.

fk0>> Нет, это попахивает полезными практиками промышленного программирования.

fk0>>Потому, что когда ты будешь вбивать число пи руками в код, то можешь на одну циферку
fk0>>где-то недалеко от точки ошибиться. И никто не заметит даже. А потом Луна-25 улетает
fk0>>на полной скорости в Луну. И ошмётков не соберёшь. Потому, что орбиту с неправильным пи
fk0>>посчитало тоже неправильно.
C>Ты предлагаешь "5" вынести в константу, а потом эту константу использовать в шаблоне? Если так, то это шиза.

И это в том числе. А для начала обосновать вообще, почему 5, а не 4.
Код ревью в большой корпорации вот точно не пройдёт.

fk0>> Число пи, кстати, в стандартной C/C++-библиотеке существует как константа M_PI.

C>Непереносимо, читай стандарт.

Если переносимо, то 4*atan(1). Но в любом случае нужно сделать константу, хоть свою самодельную, а не вписывать
в каждую функцию, чтоб случайно там вместо пи не оказался твой телефонный номер или что-то вроде.

fk0>> Мне как потенциальному код-ревьюверу, например, совершенно непонятно, почему 5, а не 6 или не 4.

C>Если бы ты проверял код Кармака с быстрым обратным корнем, то столкнулся бы с такой же проблемой. Это математика, в ней немножечко есть константы.

А в константах легко ошибиться. Почему константы в коде -- зло. Если вот прямо совсем не очевидны,
что в них невозможно ошибиться и легко проверить.

Кармаку бы порекомендовали свой код вынести в функцию или макрос, а не вписывать в код через строчку одно и то же.
Ну и конечно как-то доказать что оно работает вообще всегда, а не только иногда, возможно добавить юнит-тест.

C>Я понимаю, что у тебя подгорает, что где-то кто-то что-то делает не так, как пишут в умных книжках. Я именно из-за этой проблемы и ушёл из программирования — надоели офисные крысы, которые знают много умных слов, но работающую программу с начала до конца никогда не напишут, потому что привыкли протирать штаны в корпорациях, где всего-то и нужно что подкрутить винтик тут, открутить там. Так что предлагаю прекратить дискуссию.


Гыгыгы. А где знают как писать работающую программу? Наверное там, где их пишут и зарплату за это получают.

Re[7]: Fixed-point to string
Здравствуйте, cppguard, Вы писали:

C>Здравствуйте, fk0, Вы писали:


fk0>> Но компилятор же небось инлайнит как (a*(2^8) + b) * (c*(2^8) + d) = a*c*(2^16) + (b*c + a*d)*(2^8) + b*d

fk0>>(4 умножения, два сдвига и три сложения). Или по крайней мере вызывает встроенную функцию.
fk0>>Последнее кстати плохо (т.к. регистровый аллокатор уже не понимает какие регистры испортятся и вынужден
fk0>>что попало заталкивать в стек).
fk0>> А какой смысл в "фиксированной точке" и 8-битных числах??? Любые практические данные
fk0>>которые потребуется обрабатывать едва ли влезут в 16 бит. Хорошо бы иметь 24. А 32 может быть даже много.
fk0>>Звук например. Сам-то прекрасно в 12 бит влезает, но какая-то обработка в два раза больше потребует.
fk0>>Например, цифровой фильтр который выделяет узкую полосу частот. Помню сигнал с акселерометра обсчитывал.
fk0>>Там и 8 бит на входе более чем, но нужно же считать векторные произведения, потом тригонометрические функции,
fk0>>в итоге 16 не хватает для получения приемлемой точности. Вот 24 в самый раз.
C>Странные вопросы, потому что Я вроде уже несколько раз писал слово "AVR". Иногда полезно проветривать комнату и открывать окно, чтобы увидеть что-то кроме x86-64.

Да хоть PIC18F2520! Лишь бы не 16F628!
Я утверждаю, что почти не вижу смысла в 8 битах вообще, независимо от того, на какой платформе.
Все практически существующие виды аналоговых данных в 8 бит едва ли лезут. Кроме каких-то очень узко специальных случаев.
Вроде алгоритма им. АОНа и т.п. Впрочем там фиксированная точка не нужна.

fk0>> Просто нужно нормально писать код. Что на C, что на C++. Со временем пишешь сам так, что компилятор

fk0>>варнингов даже не даёт. Обычный набор варнингов для GCC/Clang: -Wall -Wextra -Wcast-align -fstrict-aliasing,
fk0>>ещё -Wconversion, но не все, от проекта зависит. И полезно прогонять с -fsanitize=undefined.
C>Это позиция вчерашнего студента. Сходи в большие корпорации, и посмотри, сколько там предупреждений компилятора, и какие проверки отключены.

Уже сходил. Последний раз в пятницу. Ещё понедельник тащиться. Примерно как я и описываю, хотя конечно от проекта зависит.
Но пренебрегание варнингами скорей сулит неожиданные проблемы.

fk0>> Нет, это попахивает полезными практиками промышленного программирования.

fk0>>Потому, что когда ты будешь вбивать число пи руками в код, то можешь на одну циферку
fk0>>где-то недалеко от точки ошибиться. И никто не заметит даже. А потом Луна-25 улетает
fk0>>на полной скорости в Луну. И ошмётков не соберёшь. Потому, что орбиту с неправильным пи
fk0>>посчитало тоже неправильно.
C>Ты предлагаешь "5" вынести в константу, а потом эту константу использовать в шаблоне? Если так, то это шиза.

И это в том числе. А для начала обосновать вообще, почему 5, а не 4.
Код ревью в большой корпорации вот точно не пройдёт.

fk0>> Число пи, кстати, в стандартной C/C++-библиотеке существует как константа M_PI.

C>Непереносимо, читай стандарт.

Если переносимо, то 4*atan(1). Но в любом случае нужно сделать константу, хоть свою самодельную, а не вписывать
в каждую функцию, чтоб случайно там вместо пи не оказался твой телефонный номер или что-то вроде.

fk0>> Мне как потенциальному код-ревьюверу, например, совершенно непонятно, почему 5, а не 6 или не 4.

C>Если бы ты проверял код Кармака с быстрым обратным корнем, то столкнулся бы с такой же проблемой. Это математика, в ней немножечко есть константы.

А в константах легко ошибиться. Почему константы в коде -- зло. Если вот прямо совсем не очевидны,
что в них невозможно ошибиться и легко проверить.

Кармаку бы порекомендовали свой код вынести в функцию или макрос, а не вписывать в код через строчку одно и то же.
Ну и конечно как-то доказать что оно работает вообще всегда, а не только иногда, возможно добавить юнит-тест.

C>Я понимаю, что у тебя подгорает, что где-то кто-то что-то делает не так, как пишут в умных книжках. Я именно из-за этой проблемы и ушёл из программирования — надоели офисные крысы, которые знают много умных слов, но работающую программу с начала до конца никогда не напишут, потому что привыкли протирать штаны в корпорациях, где всего-то и нужно что подкрутить винтик тут, открутить там. Так что предлагаю прекратить дискуссию.


Гыгыгы. А где знают как писать работающую программу? Наверное там, где их пишут и зарплату за это получают.