Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Определение размера типа в байтах 
:(
    Опции темы
Compositum
Дата 11.5.2011, 07:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

Репутация: нет
Всего: 1



  В своём справочнике по С, Шилдт пишет, что стандартами C89 и C99 определены минимально допустимые диапазоны значений для базовых типов. Т.е. диапазоны могут быть и больше. Например, у меня 64-х разрядный процессор + 64-битная операционная система, в свете чего я предполагаю, что в моём случае минимально допустимый диапазон может существенно отличаться от указанного Шилдтом... 
  Как в C программно определить потенциально допустимые (учитывая только архитектуру компьютера) диапазоны значений для базовых типов на текущей локальной машине, а так же фактически допустимые диапазоны значений (учитывая архитектуру компьютера + разрядность ОС) ?

Это сообщение отредактировал(а) Compositum - 11.5.2011, 07:35
PM   Вверх
Compositum
Дата 11.5.2011, 07:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Вопрос снят, т.к. в гугле нашел ответ - sizeof().
Написал такой код:
Код

#include<stdio.h>

main()
{
    printf ("char: %ld\n", sizeof(char));
    printf ("int: %ld\n", sizeof(int));
    printf ("long int: %ld\n", sizeof(long int));
    printf ("float: %ld\n", sizeof(float));
    printf ("double: %ld\n", sizeof(double));
    printf ("long double: %ld\n", sizeof(long double));
}


Результат получился таким (размеры, как я понял - в байтах):
Цитата

bush@mycomp:~/Training/C/C89/Ritchi/1/1.5.2$ gcc sizes.c -o sizes.out
bush@mycomp:~/Training/C/C89/Ritchi/1/1.5.2$ ./sizes.out
char: 1
int: 4
long int: 8
float: 4
double: 8
long double: 16

в моём случае long double существенно отличается от значения, указанного Шильдтом в справочнике - 16 байт вместо 10.
В общем - выяснил то, что хотел smile

Это сообщение отредактировал(а) Compositum - 11.5.2011, 08:15
PM   Вверх
bsa
Дата 11.5.2011, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



sizeof возвращает размер в char'ах. char - это минимально адресуемый объем данных. Именно поэтому, sizeof(char) всегда равен 1.
PM   Вверх
Compositum
Дата 11.5.2011, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Цитата(bsa @ 11.5.2011,  17:20)
sizeof возвращает размер в char'ах. char - это минимально адресуемый объем данных. Именно поэтому, sizeof(char) всегда равен 1.

а как тогда программно узнать размер char в байтах? 
PM   Вверх
borisbn
Дата 11.5.2011, 17:47 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Цитата(bsa @  11.5.2011,  17:20 Найти цитируемый пост)
sizeof возвращает размер в char'ах

Цитата
N1905=05-0165
5.3.3 Sizeof
The sizeof operator yields the number of bytes in the object representation of its operand

Цитата(Compositum @  11.5.2011,  17:39 Найти цитируемый пост)
а как тогда программно узнать размер char в байтах? 

зачем программно, если (оттуда же)
Цитата

... sizeof(char), sizeof(signed char) and sizeof(unsigned char) are 1. 


Добавлено через 5 минут и 20 секунд
Цитата(Compositum @  11.5.2011,  07:29 Найти цитируемый пост)
Например, у меня 64-х разрядный процессор + 64-битная операционная система


Цитата(Compositum @  11.5.2011,  07:59 Найти цитируемый пост)

bush@mycomp:~/Training/C/C89/Ritchi/1/1.5.2$ gcc sizes.c -o sizes.out
bush@mycomp:~/Training/C/C89/Ritchi/1/1.5.2$ ./sizes.out
char: 1
int: 4
long int: 8
float: 4
double: 8
long double: 16

хммм. должен быть 8. и ещё: ты самое интересное не вывел - sizeof( void* )

Это сообщение отредактировал(а) borisbn - 11.5.2011, 17:48


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Compositum
Дата 11.5.2011, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

Репутация: нет
Всего: 1



спасибо! понятно, тогда вопрос отпадает, раз размер всё же в байтах. 

п.с. Жаль, что в своей книге Керниган и Ритчи не рассматривают вопросы локализации и работу с расширенными символами (в приложении так и пишут, мол эту тему опускаем)...
PM   Вверх
500mhz
Дата 11.5.2011, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: 1
Всего: 14



Цитата

указанного Шильдтом в справочнике - 16 байт вместо 10.

это где такое было? 10 байт


--------------------

PM MAIL ICQ   Вверх
Compositum
Дата 11.5.2011, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Цитата(borisbn @ 11.5.2011,  17:47)
хммм. должен быть 8. и ещё: ты самое интересное не вывел - sizeof( void* )

возможно дело в том, что у меня процессор Core I7 (т.е. архитектура процессора - x64) + Ubuntu 11.04 x64.
Приду домой - добавлю строку и для void*, а почему знак умножения?

Добавлено @ 17:59
Цитата(500mhz @ 11.5.2011,  17:55)
Цитата

указанного Шильдтом в справочнике - 16 байт вместо 10.

это где такое было? 10 байт

Справочник по С, автор Шильдт (издание, если не изменяет память - 4-е, изложены полностью C89 и C99).  Если нужен номер страницы - домой приду, сообщу (книги под рукой сейчас нет).

Да, точно 4-е, вот она.

Это сообщение отредактировал(а) Compositum - 11.5.2011, 18:05
PM   Вверх
500mhz
Дата 11.5.2011, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: 1
Всего: 14



а может 0х10 ?


--------------------

PM MAIL ICQ   Вверх
Compositum
Дата 11.5.2011, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Цитата(500mhz @ 11.5.2011,  18:03)
а может 0х10 ?

я сейчас уже ухожу с работы. через полтора часа буду дома - проверю ещё раз и отпишусь.
PM   Вверх
Compositum
Дата 11.5.2011, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Проверил (стр 45): 80 бит. Соответственно 10 байт, как я и писал.
PM   Вверх
Dem_max
Дата 11.5.2011, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 4
Всего: 39



старые досовские компиляторы выдавали sizeof(int) = 2 байта, так как на x86 была адресация в 16 бит.
не удивлюсь если книженция старая то могла быть написана для досовских компиляторов, а там  возможно и 10 байт было. Завтра на работе посмотрю книженцию. 


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Compositum
Дата 11.5.2011, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Цитата(Dem_max @ 11.5.2011,  19:42)
не удивлюсь если книженция старая то могла быть написана для досовских компиляторов, а там  возможно и 10 байт было.

Книга издания 2010 года. 

Цитата(borisbn)

ты самое интересное не вывел - sizeof( void* )

Вывожу:
Цитата

bush@mycomp:~/Training/C/C89/mytests/typeSizes$ gcc sizes.c -o sizes.out
bush@mycomp:~/Training/C/C89/mytests/typeSizes$ ./sizes.out
char: 1
int: 4
long int: 8
float: 4
double: 8
long double: 16
void*: 8


PM   Вверх
500mhz
Дата 11.5.2011, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: 1
Всего: 14



да ну не может быт 10 байт, там все кратно. а 10 никуда не лезет.

Добавлено через 10 минут и 9 секунд
http://en.wikipedia.org/wiki/C_variable_ty...nd_declarations


--------------------

PM MAIL ICQ   Вверх
Compositum
Дата 11.5.2011, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Цитата(500mhz @ 11.5.2011,  19:54)
да ну не может быт 10 байт, там все кратно. а 10 никуда не лезет.

Добавлено @ 20:04
http://en.wikipedia.org/wiki/C_variable_ty...nd_declarations

Я видел, это в вики. Давайте условимся, что это последний раз, когда я фотографирую книжку - тынц. Таблица 2.1. последняя запись (long double).  Возможно в книге опечатка - за что купил, за то и продаю.
PM   Вверх
mes
Дата 11.5.2011, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(500mhz @  11.5.2011,  18:54 Найти цитируемый пост)
да ну не может быт 10 байт, там все кратно. а 10 никуда не лезет.

http://en.wikipedia.org/wiki/Extended_precision


--------------------
PM MAIL WWW   Вверх
volatile
Дата 11.5.2011, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



Цитата(500mhz @  11.5.2011,  19:54 Найти цитируемый пост)
да ну не может быт 10 байт, там все кратно. а 10 никуда не лезет.

У мат. сопроцессора x87, всю жизнь, еще с допотопных времен и по сей день внутренняя разрядность 80 бит, т.е 10 байт.

Добавлено через 1 минуту и 50 секунд
тынц
PM MAIL   Вверх
Dem_max
Дата 12.5.2011, 04:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 4
Всего: 39



так и есть в допотопной книге long double  = 80 бит.

Если не верите могу гденить запустить старый Borland там он тоже покажет 80 бит.


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Compositum
Дата 12.5.2011, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Цитата(Dem_max @ 12.5.2011,  04:06)
так и есть в допотопной книге long double  = 80 бит.

Если не верите могу гденить запустить старый Borland там он тоже покажет 80 бит.

я верю smile
PM   Вверх
bsa
Дата 12.5.2011, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Народ. Это же выравнивание!!! 64-х битному процессору значительно проще работать с данными, кратными 8-ми байтам. В противном случае, ему приходится делать несколько операций чтения из памяти, если данные находятся на границе 64-х битных ячеек. Скорее всего лишние 6 байт просто не используются.
PM   Вверх
borisbn
Дата 12.5.2011, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Цитата(bsa @  12.5.2011,  11:21 Найти цитируемый пост)
Скорее всего лишние 6 байт просто не используются.

тоже так думал, т.к. кроме 128-ми битных XMM-регистров (да и то, в них по 2 double) больше 80 бит не слышал, однако:
http://liveworkspace.org/code/c627a9ab4f36...2f8a18e1793ac52
Код

#include <stdio.h>

int main()
{
  long double d;
  unsigned long long * x = (unsigned long long *)&d;
  *x = 0; 
  *(x + 1) = 0;
  for ( int i = -10; i < 10; i++ ) {
      d = i + 0.5;
      printf( "i = %d  d = %016LX %016LX\n", i, *x, *(x+1) );
  }
}

выдаёт
Цитата

i = -10  d = 9800000000000000 000000000000C002
i = -9  d = 8800000000000000 000000000000C002
i = -8  d = F000000000000000 000000000000C001
i = -7  d = D000000000000000 000000000000C001
i = -6  d = B000000000000000 000000000000C001
i = -5  d = 9000000000000000 000000000000C001
i = -4  d = E000000000000000 000000000000C000
i = -3  d = A000000000000000 000000000000C000
i = -2  d = C000000000000000 000000000000BFFF
i = -1  d = 8000000000000000 000000000000BFFE
i = 0  d = 8000000000000000 0000000000003FFE
i = 1  d = C000000000000000 0000000000003FFF
i = 2  d = A000000000000000 0000000000004000
i = 3  d = E000000000000000 0000000000004000
i = 4  d = 9000000000000000 0000000000004001
i = 5  d = B000000000000000 0000000000004001
i = 6  d = D000000000000000 0000000000004001
i = 7  d = F000000000000000 0000000000004001
i = 8  d = 8800000000000000 0000000000004002
i = 9  d = 9800000000000000 0000000000004002

???

Это сообщение отредактировал(а) borisbn - 12.5.2011, 12:50


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
bsa
Дата 12.5.2011, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



borisbn, разве на мусор не смахивает?
PM   Вверх
borisbn
Дата 12.5.2011, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



bsa, не особо:
Цитата

i = 0  d = 8000000000000000 0000000000003FFE
i = 1  d = C000000000000000 0000000000003FFF
...
i = 6  d = D000000000000000 0000000000004001
i = 7  d = F000000000000000 0000000000004001

и потом, я обнуляю все 128 бит
Цитата

  *x = 0; 
  *(x + 1) = 0;

наверное, есть что-то, чего мы не знаем  smile 


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
bsa
Дата 12.5.2011, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



borisbn, посмотри ассемблер. Не удивлюсь, если происходит загрузка в штатные 64-х битные регистры результата, а затем уже они записываются в память.
PM   Вверх
borisbn
Дата 12.5.2011, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



bsa, в gcc посмотреть не могу, т.к. пользую liveworkspace, а в MSVC не могу, т.к.
MSDN:
Цитата

long double     8 bytes
...
The representation of long double and double is identical. However, long double and double are separate types


P.S. На liveworkspace вообще ничего не понимаю: 
Код

  long double d;
  printf( "%d\n", sizeof( d ) );

даёт 12  smile 

Это сообщение отредактировал(а) borisbn - 12.5.2011, 14:55


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
bsa
Дата 12.5.2011, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



borisbn, ну вот видишь. Система лайфворкспейса 32-х битная. А там используется выравнивание 4. Поэтому long double и получился размером 12 байт. А то, что в начале мусор - так это же кусок стека!
PM   Вверх
borisbn
Дата 12.5.2011, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



bsa, я как увидел 12 байт сразу понял... ( ну... почти сразу smile ) и да, там не мусор а счётчик цикла i. мусор будет в доп. 2-х байтах.
Спасибо за консультацию.

Это сообщение отредактировал(а) borisbn - 12.5.2011, 15:20


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
mes
Дата 12.5.2011, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(borisbn @  12.5.2011,  14:17 Найти цитируемый пост)
и да, там не мусор а счётчик цикла i. 

 счетчик цикла _отражен_ в другой переменной ? а чем это не мусор ?!

Цитата(borisbn @  12.5.2011,  14:17 Найти цитируемый пост)
Спасибо за консультацию.

нельзя ли теперь для остального народа озвучить, к каким выводам пришли в процессе активного обсуждения ?
а то чего то не собиру в одно целое все сказанное.. 




--------------------
PM MAIL WWW   Вверх
volatile
Дата 13.5.2011, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



Цитата(mes @  12.5.2011,  23:49 Найти цитируемый пост)
нельзя ли теперь для остального народа озвучить, к каким выводам пришли в процессе активного обсуждения ?

Фактическая длина встроенной плавающей арифметики не может превышать 80 бит. То что в некоторых системах сайз оф лонг дабл показывает 12, 16, и т.д - это округленная длина, за счет выравнивания. Фактически используется только 10 байт. В остальных байтах находится незначащий мусор.
Имхо выводы такие. Поправьте если ошибся.

PM MAIL   Вверх
borisbn
Дата 13.5.2011, 06:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



> Имхо выводы такие. Поправьте если ошибся.
Имхо точнее не скажешь smile
Хотя, то, что длина лонг дабла именно 80 бит - это вывод по многочисленным книгам и статьям, а не из проведённых экспериментов, но не верить этим источникам у меня лично оснований нет

Это сообщение отредактировал(а) borisbn - 13.5.2011, 06:38


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
mes
Дата 13.5.2011, 09:26 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(volatile @  12.5.2011,  23:35 Найти цитируемый пост)
Фактическая длина встроенной плавающей арифметики не может превышать 80 бит. То что в некоторых системах сайз оф лонг дабл показывает 12, 16, и т.д - это округленная длина, за счет выравнивания. Фактически используется только 10 байт. В остальных байтах находится незначащий мусор.

емко и кратко  smile 

но  :

Цитата(volatile @  12.5.2011,  23:35 Найти цитируемый пост)
не может превышать 80 бит.

тут надо уяснить что обсуждались два вида сущностей :
1. extended precision (floating-point arithmetic) - бинарное представление данных, не имеющих к языку прямого отношения.. 
оно действительно 80 бит.. но бывают и другие точности (precision) в том числе и 64 или 128 бит.. 
2. тип long double, который на ряде платформ выражен адаптером для extended precision.. в стандарте языка не указано, чем должен быть выражен этот тип, и поэтому разработчики имеют право на выбор и на разных архитектурах один и тот же тип может быть выражен разными способами..

в результате long double может не быть 80ти битным по двум причинам :
1. выражен другой точностью нежели extended
2. адаптирован под архитектуру (условно выравнен)

Добавлено через 1 минуту и 54 секунды
Цитата(borisbn @  13.5.2011,  05:34 Найти цитируемый пост)
Хотя, то, что длина лонг дабла именно 80 бит - это вывод по многочисленным книгам и статьям, а не из проведённых экспериментов, но не верить этим источникам у меня лично оснований нет

можно просто взглянуть в документацию под нужнуюю платформу  smile 


--------------------
PM MAIL WWW   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0945 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.