Кто знает как он на битовом уровне устроен? Я только со знаком разобрался
00000000000000С80540 — это 10000 (0х4005С800000000000000)
00000000000000С80640 — это 20000 ...
00000000000000960740 — это 30000
Здравствуйте yu, Вы писали:
yu>Кто знает как он на битовом уровне устроен? Я только со знаком разобрался yu>00000000000000С80540 — это 10000 (0х4005С800000000000000) yu>00000000000000С80640 — это 20000 ... yu>00000000000000960740 — это 30000
Здравствуйте Zero, Вы писали:
Z>А разве double и long double — не одно и то же?
Для VC 5,6,7 — одно и то же.
Для Intel C и многих других компиляторов long double — это 10-байтное число с плавающей точкой (в формате сопроцессора).
Здравствуйте 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:
Десятибайтное плавающее на x86 отличается от остальных плавающих форматов тем, что в его мантиссе ведущая единица хранится явно. Т.е. присоединять единицу в начале мантиссы не надо.
Здравствуйте 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.
Здравствуйте Андрей Тарасевич, Вы писали:
АТ>Внутренне — одно и то же (неужели и в VC7?).
Угу. Самое смешное — что ликвидация 10-байтового long double в свое время оправдывалась отсутствием совместимости с Alpha или кем-то таким же полумифическим, для чего существовала Windows NT.
А сейчас-то что мешало вернуть нормальный long double?
Кстати, такая политика тоже приводит к несовместимости, но уже с другими компиляторами
АТ>На уровне языка — это два разных типа. В том числе и в VC 5,6,7.
Да, конечно, имелось в виду внутреннее представление.