Re[6]: перевод чисел
От: E.Elena  
Дата: 26.10.06 17:51
Оценка:
Большое спасибо всем за помощь!
Вопрос такой:
"Получается что число из записи 0,213Е-5 или 0,213Е+5 нужно преобразовать в запись 0,00000213 и 21300 соответственно, а потом только осуществлять перевод?"
Re[2]: перевод чисел
От: E.Elena  
Дата: 26.10.06 18:17
Оценка:
Ммм... Запуталась окончательно... у меня по заданию отрицательное 16-ричное нормальзованое число одинарной точности.
На скалолько я поняла, любое число можно представить как
A=m*s^p, где
m-мантисса, s-основание системы счисления, p — порядок.
Число нормализованое — это число например,
0.1AE4F*E+4.
Или я ошибаюсь?

Ввести мне по задаче его нужно именно,как
знак — ...
мантисса — ...
порядок — ...

Получается если я введу
знак — 1 (что есть отрицательное)
мантисса — 1AE4F (в последствии преобразуется к виду 0.1AE4F)
порядок — 4.

Я понимаю как переводить и дробную и целую часть шестнадцатиричного числа в десятичное,
вопрос вот в чем, можно ли как то перевести отдельно порядок 16-го числа в 10-е,
или само число надо будет предварительно перевести к виду
0.1AE4F*E+4=1AE4.F и потом уже переводить в 10-е число?
Re[7]: перевод чисел
От: Erlond Россия  
Дата: 26.10.06 19:11
Оценка:
Здравствуйте, E.Elena, Вы писали:

EE>Большое спасибо всем за помощь!

EE>Вопрос такой:
EE>"Получается что число из записи 0,213Е-5 или 0,213Е+5 нужно преобразовать в запись 0,00000213 и 21300 соответственно, а потом только осуществлять перевод?"
Да, именно так. Ну а сам перевод описан выше, дерзайте!
Re[3]: перевод чисел
От: Кодт Россия  
Дата: 27.10.06 08:44
Оценка:
Здравствуйте, E.Elena, Вы писали:

EE>Ммм... Запуталась окончательно... у меня по заданию отрицательное 16-ричное нормальзованое число одинарной точности.


Сама всех путаешь. Задание должно состоять из двух частей: "дано" и "найти". Что дано и что найти?
Как я тебя понял,
— дано: строка, в которой шестнадцатиричная запись числа: -0.hhhhh * 16^hh (где и основание дроби, и основание записи порядка, и основание порядка — все шестнадцатиричные).
— — или же: -0.hhhhh * 2^hh, или -0.hhhhh * 2^dd — в общем, уточни
— найти: строку с десятичной записью этого же числа.

EE>Я понимаю как переводить и дробную и целую часть шестнадцатиричного числа в десятичное,

EE>вопрос вот в чем, можно ли как то перевести отдельно порядок 16-го числа в 10-е,
EE>или само число надо будет предварительно перевести к виду
EE>0.1AE4F*E+4=1AE4.F и потом уже переводить в 10-е число?

Ты хочешь это задействовать плавающую арифметику, встроенную в Си, или же всё руками сделать? В принципе, можно и так, и этак.
Самое простое — это
1) прочесть из строки знак, мантиссу и порядок,
2) запихать их в битовые поля 64-битной структуры, представляющей double (единственно, при
3) полученый double вывести с помощью printf или gcvt

Можно обойтись и без знания о внутренностях double и собрать его по формуле
int sign;
unsigned fracpart; unsigned fraclen; // значение и длина дроби
unsigned exp; // порядок

double x;
x = sign * fracpart * pow(16, exp-fraclen);
x = sign * ldexp(fracpart, (exp-fraclen)*4); // то же самое


А руками... тут надо подумать.
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re[5]: printf %a %A
От: Пётр Седов Россия  
Дата: 27.10.06 09:04
Оценка:
Здравствуйте, quodum, Вы писали:
Q>Цитата из ISO/IEC 9899:1999:
Q>

Q>A double argument representing a floating-point number is converted in the style [-]0xh.hhhhp±d,
Q>.....
Q>The exponent always contains at least one digit, and only as many more digits as necessary to represent the decimal exponent of 2.

Эта двойка — не основание системы счисления. По-английски 'основание системы счисления' — это 'base' или 'radix'.
Пётр Седов (ушёл с RSDN)
Re[2]: Логарифм по основанию 10
От: Пётр Седов Россия  
Дата: 06.11.06 18:32
Оценка: +1
Здравствуйте, Кодт, Вы писали:
К>
К>    int p = 1 + int(floor( log(x)/log(10) )); // x = 0.zzzzttttt * 10^p
К>

Если заменить 'log(x) / log(10)' на 'log10(x)', то погрешность может быть меньше.
Пётр Седов (ушёл с RSDN)
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.