реклама на сайте
подробности

 
 
> Преобразование double во float
MKdemiurg
сообщение Aug 21 2013, 15:06
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 624
Регистрация: 15-06-10
Из: Россия
Пользователь №: 57 939



Собс-но сабж.
Есть число выдаваемое прибором формата DOUBLE.
При этом в компиляторе нет этого формата , а есть float и long int;
Как пересчисчитать с потерей точности и размерности?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
neiver
сообщение Aug 21 2013, 18:57
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 214
Регистрация: 22-03-10
Из: Саратов
Пользователь №: 56 123



Как-то так можно:
Код
float DoubleToFloat(const unsigned char *doublePtr)
{
    unsigned long long v = *(unsigned long long*)doublePtr;
    unsigned mantissa = (unsigned)((v & 0x003fffffffffffffull) >> (52 - 23));
    unsigned exponent = (unsigned)((v &  0x7ff0000000000000ull) >> 52);

    if(exponent > 1023 + 127)
        mantissa = 0x7fffffff;

    if(exponent < 1023 - 127)
        return 0.0;

    exponent -= 1023 - 127;
    exponent <<= 23;

    mantissa |= exponent;
    if(v & 0x8000000000000000ull)
        mantissa |= 0x80000000ul;
    union IntToFloat
    {
        unsigned i;
        float f;
    }iToF;
    iToF.i = mantissa;
    return iToF.f;
}

Только поаккуратней с этим кодом - я его быстро набрасал, толком не тестировал.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 31st July 2025 - 22:45
Рейтинг@Mail.ru


Страница сгенерированна за 0.01373 секунд с 7
ELECTRONIX ©2004-2016