URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 5248
[ Назад ]

Исходное сообщение
"Какой тип поддерживает большие числа в Си?"

Отправлено mxl , 19-Мрт-06 09:51 
Какой тип поддерживает большие числа (11 и более знаков до запятой)в Си? Сейчас числа целые (какой для целых),но могут быть и дробные (какой для дробных)? Тип double и real не подходят.Есть ли что-нить типа double precision как в Postgres?

Содержание

Сообщения в этом обсуждении
"Какой тип поддерживает большие числа в Си?"
Отправлено mxl , 19-Мрт-06 10:18 
>Какой тип поддерживает большие числа (11 и более знаков до запятой)в Си?
>Сейчас числа целые (какой для целых),но могут быть и дробные (какой
>для дробных)? Тип double и real не подходят.Есть ли что-нить типа
>double precision как в Postgres?

И еще функцию (типа atof,atol),переводящую число из 11-13 знаков в этот тип (можно целый).


"Какой тип поддерживает большие числа в Си?"
Отправлено DeadMustdie , 19-Мрт-06 13:14 
>Какой тип поддерживает большие числа (11 и более знаков до запятой)в Си?
>Сейчас числа целые (какой для целых),но могут быть и дробные (какой
>для дробных)? Тип double и real не подходят.Есть ли что-нить типа
>double precision как в Postgres?

К сожалению, сие зависит от компилятора. Большинство современных компиляторов
кушают тип данных по имени `long long`, который по стандарту должен быть
не менее чем 64-битным. То бишь туда можно засунуть десятичные числа длиной
до 19 знаков любые и даже некоторые длиною 20 знаков.

MS для той же цели изобрела тип __int64. Впрочем, я слышал, что последние
версии VC++ кушают уже и long long.

Префикс размера для printf и scanf - 'll'. Нечто вроде
  printf("%lld", (long long)1);
  printf("%llu", (unsigned long long)1);

Microsoft и тут отличилась, там форматные строки другие - I64d и I64u, соответственно.


"Какой тип поддерживает большие числа в Си?"
Отправлено Ф , 20-Мрт-06 09:55 
long double

Насколько я знаю для i386 математический сопроцессор может работать с 10-байтными вещественными числами
10 байт  - long double
8  байт  - double
4  байта - float