Pull to refresh

Comments 10

Хотелось бы видеть проверку ваших утверждений в реальных тестах.
вот да, я хоть и не большой спец в Си, но почти уверен, что gcc в режиме O2 (возможно и меньших) о таких вещах заботится, нужны тесты.
От себя могу сказать, что протестил пока только кейс с размером структуры (g++ -std=c++17), результат как и описано в статье (если правильно расположить члены структуры, то размер ее уменьшается)
Да, потому что это поведение прописано в стандарте, и соответственно, оптимизации не него не влияют.
Язык C++ не предоставляет примитивную операцию округления чисел с плавающей точкой.

round

UFO landed and left these words here
Если этот результат является допустимым или даже желательным, и есть возможность использовать встроенную сборку, используйте этот код.

Не надо. Пожалуйста. Потому что
переносимость на другие семейства процессоров оставляет желать лучшего.

Уже давно прошли времена, когда можно было тестировать/запускать код только на х86.

К тому же посмотрите сюда, например. Компиляторы давно заменяют вызовы таких библиотечных функций оптимальной реализацией. Не надо пытаться делать работу компилятора.
n = int(floor(x + 0.5f));
Зачем здесь floor?

fistp, который, как и в следующем коде, дает гораздо более быстрый
x87 в 2017 году?
По поводу округлений, автор предлагает сейчас писать процессорозависимый код. Отличное решение! Пусть программист пишет под все типы процессоров, которые на текущий момент имеются. А про преждевременную оптимизацию — это для лохов сказано. И не важно, скажем, что программа будет терять по 10-15 секунд на постоянных обращениях к БД, зато на процессорах семейства Pentium, она будет выполнять округление на 0.00001 с быстрее.

И на счет банковского округления мне понравилось. Автор решил, что это самый «правильный» метод округления, значит тому и быть.
Sign up to leave a comment.

Articles