Извлечь экспоненту из двойного как беззнаковое значение - PullRequest
0 голосов
/ 15 июня 2019

Привет, у меня проблема с одним из упражнений с сайта codewars. Моя работа состоит в том, чтобы извлечь показатель степени из двойного значения как число без знака. Но мне не разрешается использовать какие-либо арифметические и двоичные операции и включать любые дополнительные файлы. Тогда я не могу использовать charcters: + - * /% & | ^ ~ <> # ?. Я думаю, что единственный способ решить эту проблему - использовать функции. Можете ли вы дать мне несколько советов, как это сделать?

int exponent(double d)
{
  int result;
  frexp(d,&result);
  return result;
}

1 Ответ

0 голосов
/ 15 июня 2019

Примечание: я не проверял следующее, поэтому может потребоваться некоторая «подстройка»

#include <math.h>
#include <stdint.h>

typedef union 
{
    double f;
    struct 
    {
        uint64_t mantisa : 52;
        uint64_t exponent : 11;
        uint64_t sign : 1;
    } parts;
} double_cast;

uint64_t normalizedExponent(double d)
{
    double_cast mydouble.f = d; 

    return ( mydouble.parts.sign )? mydouble.parts.exponent << 1:  mydouble.parts.exponent;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...