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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Определение размера типа в байтах 
:(
    Опции темы
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   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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