-
- Ваш код не совсем верный, т.к. младший coeffs[0] - свободный член, и на x он не множится. Но дело не в этом, а том, что на ассемблере такие вещи реализуются эффективней и работают они быстрее. Функция poly() полезна не сама по себе, а как Ксения(995 знак., 13.03.2019 14:03 - 14:09)
- Это не мой код, и он вроде бы не умножает coeffs[0] на x. Я бы шаблон написал. йцукен(203 знак., 13.03.2019 14:24 - 14:37)
- Шаблон делу не поможет, т.к. после компиляции он выльется всё в тот же сишный код. Тогда как суть дела вот в чем: функции fmin(), fmax() и fma() появились потому, что в AVX/AVX2 появились новые процессорные инструкции, делающие эти операции "за Ксения(2147 знак., 13.03.2019 16:57 - 17:11)
- Разумеется, шаблон не для оптимизации, а для того, чтобы не писать отдельно для типов float, double и complex. Всего 4 строчки, но обычно в проекте не одна функция. - йцукен(14.03.2019 00:12)
- Интересно, за счет чего все же разница образуется? fma и обычный FPU в проце по-разному считают дабловую плавучку, у них не все разряды достоверные? - Evgeny_CD(14.03.2019 00:12)
- В разрядами у FPU87 всё отлично, т.к. он всегда считает в разрядной сетке float80, а при чтении и записи в память делает конверсию в float80 и обратно. Я до сих пор им пользуюсь, когда нужна повышенная точность. Исключение поддержки float80 Ксения(3348 знак., 14.03.2019 15:03)
- Я так понимаю, обычный FPU - наследник пресловутого 8087 с 80-битными регистрами, а всякие SSE и другие слова из трёх букв используют стандартный 64-битный double. - йцукен(14.03.2019 10:28)
- Шаблон делу не поможет, т.к. после компиляции он выльется всё в тот же сишный код. Тогда как суть дела вот в чем: функции fmin(), fmax() и fma() появились потому, что в AVX/AVX2 появились новые процессорные инструкции, делающие эти операции "за Ксения(2147 знак., 13.03.2019 16:57 - 17:11)
- long double - это четверная точность что ли? - Evgeny_CD(13.03.2019 14:09)
- Увы, в MSVC "long double" эквивалентен обычному "double", т.е. оба они float64, хотя язык формально их различает. Когда-то "long double" являлся float80, но потом его та же стандартизация попёрла прочь, сделав нелегетимным (хотя FPU всё еще его Ксения(100 знак., 13.03.2019 14:15)
- Клевета. Стандарт C99 не запрещает long double. - SciFi(13.03.2019 14:17)
- спасибо - Evgeny_CD(13.03.2019 14:16)
- Нет, это мрачное порождение 87 сопроцессора :( -> - Evgeny_CD(13.03.2019 14:15, ссылка)
- Сопроцессор FPU87 был удивительно хорош для своего времени! Даже тригонометрию и логарифмы умел считать, и точнее, чем нынешние. А сейчас доупрощались всмятку, заразившись дурью от RISC'а. :) - Ксения(13.03.2019 17:33)
- я вот всё хляжу на свои 80287 и прочие - может их приделать к Атымелю?) - Alex68(14.03.2019 00:45)
- Скотчем :) -> Хотя корпуса есть очень компактные :) - Evgeny_CD(14.03.2019 00:50, ссылка)
- вроде как интерфейс не шибко мудрёный. к атмеге какой думаю ног хватит подключиться) - Alex68(14.03.2019 00:51)
- Скотчем :) -> Хотя корпуса есть очень компактные :) - Evgeny_CD(14.03.2019 00:50, ссылка)
- я вот всё хляжу на свои 80287 и прочие - может их приделать к Атымелю?) - Alex68(14.03.2019 00:45)
- Сопроцессор FPU87 был удивительно хорош для своего времени! Даже тригонометрию и логарифмы умел считать, и точнее, чем нынешние. А сейчас доупрощались всмятку, заразившись дурью от RISC'а. :) - Ксения(13.03.2019 17:33)
- Увы, в MSVC "long double" эквивалентен обычному "double", т.е. оба они float64, хотя язык формально их различает. Когда-то "long double" являлся float80, но потом его та же стандартизация попёрла прочь, сделав нелегетимным (хотя FPU всё еще его Ксения(100 знак., 13.03.2019 14:15)
- Это не мой код, и он вроде бы не умножает coeffs[0] на x. Я бы шаблон написал. йцукен(203 знак., 13.03.2019 14:24 - 14:37)
- Ваш код не совсем верный, т.к. младший coeffs[0] - свободный член, и на x он не множится. Но дело не в этом, а том, что на ассемблере такие вещи реализуются эффективней и работают они быстрее. Функция poly() полезна не сама по себе, а как Ксения(995 знак., 13.03.2019 14:03 - 14:09)