Я работаю во встроенной платформе и нуждаюсь в более быстром способе умножения чисел с плавающей запятой для некоторых альгорифмов. Кто-нибудь знает о быстрой реализации, я могу отказаться от некоторой точности для скорости.быстрое умножение с плавающей запятой
ответ
Если ваша цель имеет FPU, то она уже будет выполнять умножение с плавающей запятой так быстро, как это возможно. Если, однако, у него нет FPU, тогда вам лучше использовать арифметику с фиксированной точкой.
Использование арифметики с фиксированной точкой в C затруднено тем фактом, что нет встроенного типа данных фиксированной точки - каждая операция представляет собой явный вызов функции, который не является очень естественным или читаемым, в C++, однако возможно определите класс fixed
с перегрузкой оператора и функции, так что использование неподвижной точки - это просто случай замены float
или double
на fixed
, включая автоматические преобразования между типами. Одна такая библиотека, которая включает в себя обширную математическую библиотеку, а не просто простые арифметические операторы, можно найти here. В ARM он обычно в 5 раз быстрее, чем программная плавающая точка.
Если вы используете код C++, вы можете в большинстве случаев использовать компиляцию C++ для поддержки библиотеки с фиксированной точкой, но по существу писать код C, как если бы он имел встроенный тип fixed
. То есть вам не нужно использовать или знать много C++, чтобы извлечь выгоду из этой библиотеки, и не будет накладных расходов по сравнению с тем же кодом, скомпилированным как C.
'Если ваша цель имеет FPU, то она уже будет выполнять умножение с плавающей запятой так быстро, как это возможно. @Clifford - я уверен, что вы это знаете, но OP не может быть ... даже если у цели есть FPU, если среда сборки не настроена на использование встроенного FPU, и если FPU не включен, код будет по-прежнему использовать эмуляцию S/W. Поверьте мне, я все время вижу это ... – Dan
@ Dan: Очень хорошая точка. Несколько лет назад я оценил LPC3180; и необычный чип ARM9 + VFP, даже если он настроен на использование FPU, реализация библиотеки sqrt() по-прежнему использовала алгоритм конвергенции, а не аппаратную инструкцию sqrt. Потребовалось некоторое выяснение, чтобы связать правильную библиотеку. – Clifford
- 1. Умножение с плавающей запятой
- 2. Умножение с плавающей запятой MIPS
- 3. плавающей запятой умножение в Java
- 4. Сложение/умножение с плавающей запятой/Подразделение
- 5. Умножение чисел с плавающей запятой в verilog
- 6. Побитовое умножение числа с плавающей запятой
- 7. умножение с плавающей запятой и повторное добавление
- 8. Умножение чисел с плавающей запятой в MIPS
- 9. Быстрое умножение
- 10. Быстрое умножение матрицы 4x4 в Java с буферами с плавающей запятой NIO
- 11. Перемножается с плавающей запятой?
- 12. ошибки с плавающей запятой рубина
- 13. Быстрое умножение
- 14. Скорость операций с плавающей запятой
- 15. быстрое/быстрое целочисленное умножение в рубине?
- 16. Является ли добавление и умножение с плавающей запятой ассоциативным?
- 17. Почему добавление с плавающей запятой занимает больше времени, чем умножение
- 18. Delphi 5 и умножение с плавающей запятой и математика
- 19. Умножение номера IEEE-754 с плавающей запятой в MIPS
- 20. Строгое неравенство для чисел с плавающей запятой умножение
- 21. Быстрое разреженное умножение матрицы
- 22. Быстрое умножение матрицы
- 23. JavaScript с плавающей запятой
- 24. Нормализовать с плавающей запятой
- 25. Проблемы с плавающей запятой
- 26. WxSlider с плавающей запятой?
- 27. Ошибки с плавающей запятой
- 28. Неточности с плавающей запятой
- 29. XPath с плавающей запятой?
- 30. Переполнение с плавающей запятой
Какая платформа? Какие функции у него есть? Почему бы просто не использовать умножение числа с плавающей запятой? – tmyklebu
Почему бы вам не использовать фиксированную точку и управлять десятичной запятой самостоятельно? все равно плавающая точка. –
Недостаточно информации. Вам нужно полное поведение IEEE754? т. е. вам нужно иметь дело с NaN, INF, денонмами и т. д.? Или вы можете справиться с умножением мантиссы с фиксированной точкой и * additive * '(2^EXP)'? –