[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). Совершенно точно переносимо и скорее всего эффективнее, чем приведено выше.
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

Профиль

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 01:37
Powered by Dreamwidth Studios