Как мне конвертировать двойной в 64-битный ieee754?

У меня есть этот код:

std::string GetBinary32( double value )
{
union
{
float input;   // assumes sizeof(float) == sizeof(int)
int   output;
}    data;

data.input = value;

std::bitset<sizeof(float) * CHAR_BIT>   bits(data.output);

std::string mystring = bits.to_string<char, std::char_traits<char>, std::allocator<char> >();

return mystring;
}

Я хочу получить 64 представления двойника.

что мне нужно изменить?

0

Решение

Прежде всего, хотя метод объединения является популярным для этого, имейте в виду, что доступ к члену объединения, отличному от последнего написанного члена, не определено поведение в C ++. Так что лучше тестируйте результат на своем компиляторе и забудьте о переносимости.

При этом предполагается, что ваш компилятор использует IEE754 (это можно проверить, как упоминалось Вот ), вам нужно будет изменить свой союз, чтобы он содержал двойной и длинный лонг. Long long будет использоваться как на 32-битных, так и на 64-битных компьютерах, представленных на 64-битных системах как стандарт де-факто для Windows и Unix (хотя стандарт C ++ не навязывает ничего по размеру, а только по диапазонам и порядку размера между char, int , долго и т.д …).

И, конечно, адаптируйте переменную битов с помощью sizeof (double)

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]