Я использую C++ для вычисления различных типов специальных функций (например, функция Ламберта, методы итерации для оценки инверсий и т. Д.). Во многих случаях существует явно лучший подход к работе с мантиссой и экспонентом напрямую.Как работать (быстро) на мантиссе и экспоненциальной части double или float на C++?
Я нашел много ответов, как извлечь мантиссы и экспоненциальные части, однако все они были просто «академическими случаями с не очень эффективной скоростью вычислений», которые для меня немного бесполезны (моя мотивация работать с мантиссой и экспонентом в улучшении вычислительной скорости). Иногда мне нужно вызвать определенную функцию примерно в миллиард раз (очень дорогостоящие вычисления), поэтому каждая сохраненная вычислительная работа прекрасна. И использование «frexp», которое возвращает мантисса как двойное, не очень подходит.
Мои вопросы (для C++ компилятор с IEEE 754 с плавающей точкой):
1) Как читать конкретный бит мантиссы поплавка/двойник?
2) Как читать целую мантию в целое число/байт поплавка/двойное?
3) Те же вопросы, что и 1), 2) для экспоненты.
4) Те же вопросы, что и 1), 2), 3) для записи.
С уважением, что моя мотивация - это более быстрое вычисление, если я непосредственно работаю с мантиссой или экспонентом. Я полагаю, что должно быть очень простое решение.
Взгляните на IEE754 в Интернете, все подробно объяснено. Я серьезно сомневаюсь, что вам действительно нужна такая вещь ... –
Существует очень простое, но не переносное решение. Если я могу так сказать, вы будете делать странные вещи. Я бы туда не поехал. Напишите эффективный код с 'float' /' double', пусть компилятор и FPU сделают все остальное. –
Используйте бит twiddling –