Тип long double ...
От: yu  
Дата: 26.04.02 07:41
Оценка:
Кто знает как он на битовом уровне устроен? Я только со знаком разобрался
00000000000000С80540 — это 10000 (0х4005С800000000000000)
00000000000000С80640 — это 20000 ...
00000000000000960740 — это 30000
Re: Тип long double ...
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 26.04.02 09:05
Оценка: 3 (1)
Здравствуйте yu, Вы писали:

yu>Кто знает как он на битовом уровне устроен? Я только со знаком разобрался



Как все плавающие числа:
Для Intel-а:

0 — самый старший бит
63 — самый младший


0 бит -- знак
1 — 11 -- экспонента
12 — 63 -- мантисса(дробная часть)

знак * (1+мантисса/2^52) * 2^(экспонента — 0x3ff)
Re: Тип long double ...
От: Zero  
Дата: 26.04.02 09:28
Оценка:
Здравствуйте yu, Вы писали:

yu>Кто знает как он на битовом уровне устроен? Я только со знаком разобрался

yu>00000000000000С80540 — это 10000 (0х4005С800000000000000)
yu>00000000000000С80640 — это 20000 ...
yu>00000000000000960740 — это 30000

А разве double и long double — не одно и то же?
Re[2]: Тип long double ...
От: retalik www.airbandits.com/
Дата: 26.04.02 09:33
Оценка: 6 (2)
Здравствуйте Zero, Вы писали:

Z>А разве double и long double — не одно и то же?

Для VC 5,6,7 — одно и то же.
Для Intel C и многих других компиляторов long double — это 10-байтное число с плавающей точкой (в формате сопроцессора).
Успехов,
Виталий.
Re[3]: Тип long double ...
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 26.04.02 11:20
Оценка: 3 (1)
Здравствуйте retalik, Вы писали:

R>Здравствуйте Zero, Вы писали:


Z>>А разве double и long double — не одно и то же?

R>Для VC 5,6,7 — одно и то же.
R>Для Intel C и многих других компиляторов long double — это 10-байтное число с плавающей точкой (в формате сопроцессора).

Вот только пример из начального письма не похож ни на 8 байтный long double VC++, ни на 10 байтное число с плавающей точкой для сопроцессора

Так для сопроцессора:

0 бит -- знак

1-15 -- эксонента
16-79 -- мантисса

и формула:

знак * (1 + мантисса/2^64)*2^(экспонента — 0x3FFF)


10000 — 0x400c3880000000000000 (не то, что в примере)



Для примера подходит вот такой формат и то если числа были не 10000-30000, а 100 — 300:

0 бит -- знак

1-15 -- эксонента
16-79 -- мантисса

и формула:

знак * (мантисса/2^64)*2^(экспонента — 0x3FFE)
Re[2]: Тип long double ...
От: Андрей Тарасевич Беларусь  
Дата: 26.04.02 14:18
Оценка: 3 (1)
Здравствуйте DarkGray, Вы писали:

DG>Здравствуйте yu, Вы писали:


yu>>Кто знает как он на битовом уровне устроен? Я только со знаком разобрался



DG>Как все плавающие числа:

DG>Для Intel-а:

DG>0 — самый старший бит

DG>63 — самый младший


DG> 0 бит -- знак

DG> 1 — 11 -- экспонента
DG>12 — 63 -- мантисса(дробная часть)

DG>знак * (1+мантисса/2^52) * 2^(экспонента — 0x3ff)


Десятибайтное плавающее на x86 отличается от остальных плавающих форматов тем, что в его мантиссе ведущая единица хранится явно. Т.е. присоединять единицу в начале мантиссы не надо.
Best regards,
Андрей Тарасевич
Re[2]: Тип long double ...
От: Андрей Тарасевич Беларусь  
Дата: 26.04.02 15:36
Оценка:
Здравствуйте Zero, Вы писали:

Z>Здравствуйте yu, Вы писали:


yu>>Кто знает как он на битовом уровне устроен? Я только со знаком разобрался

yu>>00000000000000С80540 — это 10000 (0х4005С800000000000000)
yu>>00000000000000С80640 — это 20000 ...
yu>>00000000000000960740 — это 30000

Z>А разве double и long double — не одно и то же?


Не, не одно и то же. С точки зрения языка это два разных типа. То, что в каком-то компиляторе эти два типа представляются одинаково, ничего не значит. Есть компиляторы, в которых тип long double больше типа double.
Best regards,
Андрей Тарасевич
Re[3]: Тип long double ...
От: Андрей Тарасевич Беларусь  
Дата: 26.04.02 15:38
Оценка:
Здравствуйте retalik, Вы писали:

R>Здравствуйте Zero, Вы писали:


Z>>А разве double и long double — не одно и то же?

R>Для VC 5,6,7 — одно и то же.

Внутренне — одно и то же (неужели и в VC7?). На уровне языка — это два разных типа. В том числе и в VC 5,6,7.
Best regards,
Андрей Тарасевич
Re[4]: Тип long double ...
От: retalik www.airbandits.com/
Дата: 27.04.02 02:11
Оценка:
Здравствуйте Андрей Тарасевич, Вы писали:

АТ>Внутренне — одно и то же (неужели и в VC7?).

Угу. Самое смешное — что ликвидация 10-байтового long double в свое время оправдывалась отсутствием совместимости с Alpha или кем-то таким же полумифическим, для чего существовала Windows NT.
А сейчас-то что мешало вернуть нормальный long double?
Кстати, такая политика тоже приводит к несовместимости, но уже с другими компиляторами

АТ>На уровне языка — это два разных типа. В том числе и в VC 5,6,7.

Да, конечно, имелось в виду внутреннее представление.
Успехов,
Виталий.
Re: Тип long double ...
От: yu  
Дата: 29.04.02 05:36
Оценка:
Всем спасибо за ответы, помогло!
Кстати, компилятор BC++ 5.02
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.