[personal profile] waspagv
А есть ли в языке C стандартная библиотека функций для работы с вещественными числами на битовом уровне? Нужны вещи типа: узнать порядок (двоичный) числа, изменить этот порядок на заданную величину, выделить мантиссу и т.п. Я, конечно, могу сделать все это с помощью масок и сдвигов, но тогда программа станет непереносимой. Не хочу привязываться к конкретному представлению.

Любопытно, что в ISO-стандарте языка Modula-2 такие модули есть: LowReal и LowLong.

UPD. Собственно, мне нужно найти мантиссу разности двух чисел a и b, когда порядки их приведены к наибольшему из порядков чисел a,b и с. Задачу решает следующая универсальная, но неэффективная процедура comp:

int expon(double x)
{
    if (x==0.0)
        return -999;
    else
        return floor(log10(fabs(x))+1);
}

double comp(double a, double b, double c)
{
    int ae,be,ce;
    ae = expon(a); be = expon(b); ce = expon(c);
    if (ae    if (ae    return fabs(a-b)/pow(10.0,ae);
}


UPD2. Решил задачу функциями ldexp и frexp из <math.h> (спасибо [livejournal.com profile] dims12). Совершенно точно переносимо и скорее всего эффективнее, чем приведено выше.
Date: 26 January 2015 09:44 (UTC)

From: [identity profile] waspagv.livejournal.com
Спасибо. Нашел. Запись обновил: добавил решение.

Профиль

waspagv: (Default)
DCS Foyle

March 2025

M T W T F S S
     12
3456789
10111213141516
17181920212223
242526272829 30
31      

Style Credit

Expand Cut Tags

No cut tags
Page generated 07/07/2025 08:56
Powered by Dreamwidth Studios