Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.71
Pravednik
0 / 0 / 0
Регистрация: 29.11.2011
Сообщений: 13
#1

Сколько в float выделяется под экспоненту ? - C++

10.11.2012, 12:19. Просмотров 1850. Ответов 2
Метки нет (Все метки)

Сколько в float выделяется под экспоненту ? в одном источнике читаю - 1 бит под знак и 7 под экспоненту, в другом - 8 бит под экспоненту

"в 32-битном слове отведены 1 двоичный разряд под знак числа, 8 двоичных разрядов под порядок и оставшиеся 23 разряда - под мантиссу."

" 32-разрядное нормализованное число со знаком, 8-разрядным смещенным порядком и 24-разрядной мантиссой (старший бит мантиссы, всегда равный 1, не хранится в памяти, и размер поля, выделенного для хранения мантиссы, составляет только 23 разряда). "

"В старшем бите 1-го байта хранится знак числа: 0 обозначает плюс, 1 — минус. Оставшиеся 7 бит первого байта содержат машинный порядок. В следующих трех байтах хранятся значащие цифры мантиссы (24 разряда)."

и если под мантиссу отводится 23 бита, то получается, что максимальное число там может поместиться 2^23 = 8388608? однако число это он выводить не хочет, округляет последние цифры.

и еще у меня вопрос)) откуда берутся значащие цифры? почему у float 7 значащих цифр, откуда берется эта цифра, как она получается?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.11.2012, 12:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сколько в float выделяется под экспоненту ? (C++):

Скольки бит выделяется в float и double под целую часть? - C++
Подскажите пожалуйста, сколько бит выделяется в float и double под целую часть?

Сколько памяти выделяется под структурную переменную - C++
Подскажите, пожалуйста. Сколько памяти выделяется под структурную переменную типа cell? struct cell { unsigned char bit:1; //i-ый...

Как выделяется память под массив string? - C++
В общем читаю книжку, там объявлены два массива int* p = new int, int* v = new string... бла бла бла ....а потом -> ...После резервирования...

Объясните как выделяется память под умные указатели - C++
Читаю книгу Праты, не могу понять этот абзац, а точнее применение операторов new и new и delete и delete с ними. Почему нельзя...

опять ошибка.на этот раз cannot convert `float (*)(float)' to `float' in argument passing - C++
#include<stdio.h> #include<stdlib.h> #include<math.h> float f1(float x)/*vira*enie 1*/ {return (x*cos(x))/(1+ pow(x,2));} ...

Чем отличаются float преобразования (float)var от float(var) - C++
Здравствуйте! Подскажите, чем отличается (float)var от float(var)

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Евгений М.
1035 / 976 / 54
Регистрация: 28.02.2010
Сообщений: 2,829
Завершенные тесты: 2
10.11.2012, 12:29 #2
Цитата Сообщение от Pravednik Посмотреть сообщение
в другом - 8 бит под экспоненту
Это верно. Источник:
http://www.cs.berkeley.edu/~wkahan/i...us/IEEE754.PDF
Стр. 2.
K+1 - количество бит на экспоненту
N - количество на знак и мантиссу
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
10.11.2012, 12:40 #3
float это в 99% случаев формат single precision. 32 бита: 1 на знак, 8 на порядок, остальные 23 на мантиссу + 1 неявный единичный бит. float представляет числа с плавающей точкой. К примеру, если эти 32 бита имеют такое значение: 491B77A016. Это разрезается на знак, порядок и мантиссу:
1 00100100 0110110111011110100000
Всё это представляет число (–1)1 × 1.01101101110111101000002 × 2001001002 – 12710. То есть примерно –1.42917633056640625 × 2–91 ≈ –5.772397e-28

24 бита — потому что это 23 реально хранящихся бита плюс тот один неявный единичный бит перед двоичной точкой.

7 значащих цифр, потому что в мантиссе 24 значащих бита. Это 24 бита информации о значащих цифрах числа. С помощью 24 битов можно закодировать 24 × log10 2 ≈ 7,225 десятичных цифр. Вот отсюда и семь.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.11.2012, 12:40
Привет! Вот еще темы с ответами:

неверное приведение void* к *float а далее к float - C++
Почему когда привожу void* к int* потом к int то все работает, данные не бьются и работают нормально, когда делаю те же операции но с...

cannot convert `float' to `float*. Почему так происходит? - C++
всем привет, помогите исправить ошибки... а то голова мало варит уже, а завтра надо сдать уже #include <stdio.h> #include <stdlib.h>...

invalid types `float[float]' for array subscript - C++
void SEARCH(float vol, float price, int i) { if (i>N) { if(price>maxprice) { ...

Как запрограммировать экспоненту - C++
Добрый вечер! Помогите пожалуйста с вопросом: как запрограммировать функцию exp(x). Это стандартная функция, мне нужно сделать аналог...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru