Float double long double

Float double long double

Целый тип (int)

Размер типа int не определяется стандартом, а зависит от компьютера и компилятора.

Для 16-разрядного процессора под величины этого типа отводится 2 байта,

для 32-разрядного — 4 байта.

Спецификатор short перед именем типа указывает компилятору, что под число требуется отвести 2 байта независимо от разрядности процессора.

Спецификатор long означает, что целая величина будет занимать 4 байта.

Таким образом, на 16-разрядном компьютере эквиваленты int и short int,

а на 32-разрядном — int и long int.

Внутреннее представление величины целого типа — целое число в двоичном коде. При использовании спецификатора signed старший бит числа интерпретируется как знаковый (0 — положительное число, 1 — отрицательное). Спецификатор unsigned позволяет представлять только положительные числа, поскольку старший разряд рассматривается как часть кода числа. Т. о., диапазон значений типа int зависит от спецификаторов. Диапазоны значений величин целого типа с различными спецификаторами для IBM PC-совместимых компьютеров приведены в таблице «Диапазоны значений простых типов данных».

По умолчанию все целочисленные типы считаются знаковыми, то есть спецификатор signed можно опускать.

Константам, встречающимся в программе, приписывается тот или иной тип в соответствии с их видом. Если он по каким-либо причинам не устраивает программиста, моно явно указать требуемый тип с помощью суффиксов L, l (long) и U, u (unsigned). Например, константа 32L будет иметь тип long и занимать 4 байта. Можно использовать суффиксы L и U одновременно, например, 0x22UL или 05Lu.

Примечание.Типы short int, long int, signed int и unsigned int можно сокращать до short, long, signed и unsigned соответственно.

Символьный тип (char)

Под величину символьного типа отводится количество байт, достаточное для размещения любого символа из набора символов для данного компьютера, что и обусловило название типа. Как правило, это 1 байт. Тип char, как и другие целые типы, может быть со знаком или без знака. В величинах со знаком можно хранить значения в диапазоне от -128 до 127. При использовании спецификатора unsigned значения могут находиться в пределах от 0 до 255. Этого достаточно для хранения любого символа из 256-символьного набора ASCII. Величины типа char применяются также для хранения целых чисел.

Расширенный символьный тип (wchar_t)

Тип wchar_t предназначен для работы с набором символов, для кодировки которых недостаточно 1 байта. Например, Unicode. Размер этого типа зависит от реализации; как правило, он соответствует типу short. Строковые константы типа wchar_t записываются с префиксом L, например, L“Gates”.

Логический тип (bool)

Величины логического типа могут принимать только значения true и false, являющиеся зарезервированными словами. Внутренняя форма представления значения false — 0 (нуль). Любое другое значение интерпретируется как true. При преобразовании к целому типу trueимеет значение 1.

Типы с плавающей точкой (float, double и long double)

Стандарт C++ определяет три типа данных для хранения вещественных значений: float, double и long double.

Типы данных с плавающей точкой хранятся в памяти иначе, чем целочисленные. Внутреннее представление вещественного числа состоит из двух частей — мантиссы и порядка.

В IBM PC-совместимых компьютерах величины типа floatзанимают 4 байта, из которых один двоичный разряд отводится под знак мантиссы, 8 разрядов под порядок и 23 под мантиссу. Мантисса — это число, большее 1.0, но меньшее 2.0. Поскольку старшая цифра мантиссы всегда равна 1, она не хранится.

Для величин типа double, занимающих 8 байт, под порядок и мантиссу отводится 11 и 52 разряда соответственно. Длина мантиссы определяет точность числа, а длина порядка — его диапазон. Как можно видеть из таблицы в конце записи, при одинаковом количестве байт, отводимом под величины типа float и long int, диапазоны их допустимых значений сильно различаются из-за внутренней формы представления.

Читайте также:  Asus zenfon 3 max zc520tl

Спецификатор longперед именем типа doubleуказывает, что под его величину отводится 10 байт.

Константы с плавающей точкой имеют по умолчанию тип double. Можно явно указать тип константы с помощью суффиксов F, f (float) и L, l (long).

Например, константа 2E+6L будет иметь тип long double, а константа 1.82f — тип float.

При написании универсальных для разных платформ программ нельзя делать допущений о размере типа int. Для его получения необходимо пользоваться операцией sizeof, результатом которой является размер типа в байтах.

Например, для операционной системы MS-DOS sizeof (int) даст в результате 2, а для Windows 98 или OS/2 результатом будет 4.

В стандарте ANSI диапазоны значений для основных типов не задаются, определяются только соотношения между их размерами, например:

sizeof(float) ≤ slzeof(double) ≤ sizeof(long double)
sizeof(char) ≤ slzeof(short) ≤ sizeof(int) ≤ sizeof(long)

Примечание. Минимальные и максимальные допустимые значения для целых типов зависят от реализации и приведены в заголовочном файле
( ), характеристики вещественных типов — в файле ( ), а также в шаблоне класса numeric_limits

Тип void

Кроме перечисленных, к основным типам языка относится тип void, но множество значений этого типа пусто. Он используется для определения функций, которые не возвращают значения, для указания пустого списка аргументов функции, как базовый тип для указателей и в операции приведения типов.

Различные виды целых и вещественных типов, различающиеся диапазоном и точностью представления данных, введены для того, чтобы дать программисту возможность наиболее эффективно использовать возможности конкретной аппаратуры, поскольку от выбора типа зависит скорость вычислений и объем памяти. Но оптимизированная для компьютеров какого-либо одного типа программа может стать не переносимой на другие платформы, поэтому в общем случае следует избегать зависимостей от конкретных характеристик типов данных.

Тип Диапазон значений Размер (байт)
bool true и false
signed char -128 … 127
unsigned char 0 … 255
signed short int -32 768 … 32 767
unsigned short int 0 … 65 535
signed long int -2 147 483 648 … 2 147 483 647
unsigned long int 0 … 4 294 967 295
float 3.4e-38 … 3.4e+38
double 1.7e-308 … 1.7C+308
long double 3.4e-4932 … 3.4e+4932

Структура программы

Программа на языке С++ состоит из функций, описаний и директив препроцессора. Одна из функций должна иметь имя main. Выполнение программы начинается с первого оператора этой функции. Простейшее определение функции имеет следующий формат:

1 2 3 . тип возвращаемого значения имя([ параметры ]) < . операторы, составляющие тело функции . >

Как правило, функция используется для вычисления какого-либо значения, поэтому перед именем функции указывается его тип. Ниже приведены самые необходимые сведения о функциях:

  • если функция не должна возвращать значение, указывается тип void:
  • тело функции является блоком и, следовательно, заключается в фигурные скобки;
  • функции не могут быть вложенными;
  • каждый оператор заканчивается точкой с запятой (кроме составного оператора).

Пример структуры программы, содержащей функции main, fl и f2:

1. 2. 3. 4. 5. 6. 7. 8. 9. 10 11 директивы препроцессора описания int main() < операторы главной функции >int fl() < операторы функции fl >int f2()

Программа может состоять из нескольких модулей (исходных файлов).

Замечания о вводе/выводе в C++

В языке С++ нет встроенных средств ввода/вывода — он осуществляется с помощью функций, типов и объектов, содержащихся в стандартных библиотеках.

Используется два способа: функции, унаследованные из языка С, и объекты С++.

Основные функции ввода/вывода в стиле С:

int scanf (const char* format, . ) // ввод
int printf(const char* format, . ) // вывод

Читайте также:  Csv file что это

Они выполняют форматированный ввод и вывод произвольного количества величин в соответствии со строкой формата format. Строка формата содержит символы, которые при выводе копируются в поток (на экран) или запрашиваются из потока (с клавиатуры) при вводе, и спецификации преобразования, начинающиеся со знака %, которые при вводе и выводе заменяются конкретными величинами.

Пример программы, использующей функции ввода/вывода в стиле С:

#include
int main() <
int i;
printf("Введите целое числоп");
scanf("%d", &i);
printf("Вы ввели число %d, спасибо!", i);
return 0;
>

Первая строка этой программы — директива препроцессора, по которой в текст программы вставляется заголовочный файл, содержащий описание использованных в программе функций ввода/вывода (в данном случае угловые скобки являются элементом языка). Все директивы препроцессора начинаются со знака #.

Третья строка — описание переменной целого типа с именем i.

Функция printf в четвертой строке выводит приглашение «Введите целое число» и переходит на новую строку в соответствии с управляющей последовательностью
. Функция scanf заносит введенное с клавиатуры целое число в переменную i (знак & означает операцию получения адреса), а следующий оператор выводит на экран указанную в нем строку, заменив спецификацию преобразования на значение этого числа.

Программа с использованием библиотеки классов С++:

#include
int main() <
int i;
cout > i;
cout >.

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

(Примечание: в этой статье предполагается, что читатели знают об основах информатики)

Многие новички-программисты / студенты, обучающиеся в области компьютерных наук, задают часто задаваемые вопросы, имеющие отношение к конкретной области в области компьютерных наук, которые они изучают. Большинство начинающих курсов начинаются с тем номера системы, который используется на современных компьютерах, включая двоичный, десятичный, восьмеричный а также шестнадцатеричный система. Это форматы номеров компьютеров, которые являются внутренними представлениями числовых значений на компьютерах (или калькуляторах и любых других цифровых компьютерах). Эти значения сохраняются как «группировка бит».

Поскольку мы знаем, что компьютеры представляют данные в наборах двоичных цифр (т. Е. В комбинации 1s а также 0s, такие как, 1111 представляет собой 15 в десятичной системе), имеет смысл преподавать различные форматы чисел, которые используются для представления динамического диапазона значений, поскольку они составляют основные блоки обработки вычислений / число в любой операции. Как только система чисел определена в классе (часто плохо), у студентов возникает желание перейти на разные форматы чисел в одном и том же типе (т. Е. арифметика с плавающей запятой), которые имеют определенную точность и диапазон чисел. Таким образом, они вынуждены изучать нюансы между определенными типами. Два из наиболее часто используемых типов данных: терка а также двойной, и в то время как они нацелены на одни и те же потребности (то есть, арифметика с плавающей запятой), в их внутреннем представлении и общем влиянии на расчет в программе есть определенная разница. К сожалению, многие программисты пропускают нюансы между плоскими и двойными типами данных и в конечном итоге злоупотребляют ими в тех местах, где их не следует использовать в первую очередь. В конечном итоге это приводит к просчетам в других частях программы.

В этой статье я расскажу вам разницу между float и double с примерами кода на языке программирования C. Давайте начнем!

Поплавок против Двойного … В чем дело?

Float и Double — это представление данных, которое используется для арифметических операций с плавающей запятой, подумайте о десятичных числах, которые вы вычисляете в классе математики, например, 20.123, 16.23, 10.2и т. д., они не являются целыми числами (т. 2, 5, 15и т. д.), поэтому они требуют рассмотрения фракций в двоичном формате. В результате десятичные числа (т. Е. 20.123, 16.23, и т. д.) не может быть легко представлен нормальным двоичным форматом (т. е. Integer). Основное различие между Float и Double заключается в том, что первое представляет собой данные с плавающей запятой с единственной точностью (32-разрядные), в то время как второй тип данных с плавающей точкой двойной точности (64-разрядная). Двойной называется «двойным», потому что это в основном версия с двойной точностью Float. Если вы вычисляете огромную сумму (думайте о тысячах 0 в номере), тогда неточности будут меньше в Double, и вы не потеряете много точности.

Читайте также:  Fallout 76 дата выхода на xbox one

Лучше проработать с использованием примеров кода. Ниже приведена операция по Float и Double через математические функции, предоставляемые на языке C:

float num1 = 1.f / 82;

float num1 = sqrt (2382719676512365.1230112312312312);

So I know that there’s a large difference in the precision of floats and doubles. I get that. Promise.

But, in C++, when calling scanf and printf, the notation used to specify a double is "%lf", and that stands for long float, right? So while a float is less precise than a double, a LONG float (presumedly called long float because it can be "longer" by having more terms) is the same accuracy and therefore essentially the same thing?

Just to clarify, here’s what I mean:

So the root of my question: Is long float another name for double?

4 Answers 4

There is no such a type as long float within my knowledge.

This post gives you information about why people use lf to print double with printf if this is the cause of your confusion.

By courtesy of @Jerry Coffin:

"%f" is the (or at least "a") correct format for a double. There is no format for a float, because if you attempt to pass a float to printf, it’ll be promoted to double before printf receives it. "%lf" is also acceptable under the current standard — the l is specified as having no effect if followed by the f conversion specifier (among others).

So the reason is that when people do:

It is equivalent to do:

printf specifier names don’t have anything in common with names of types.

They are just named that way so they are short and easy to remember.

float -> double -> long double

(also, they couldn’t name printf double specifier as %d because that name is already reserved for decimal representation of int (compared to octal %o ))

@taocp’s answer explains why you can use both %f and %lf with printf , but note you can’t do it with scanf

The long float is a K&R C first edition type that existed. It is synonymous with double .

After the first standard C89/C90, long float is removed. It is not deprecated. C89/C90 is also K&R C second edition. Then there is the multilingual amendment known as C94/C95 that adds wchar_t , as well as features such as .

C++ started long before C was standardized. Templates were standardized in 1983, making it harder to compile to C code. It was not standardized until 1998. Old compilers may have deprecated old features that are removed with more contemporary compilers. The %lf is a legacy of long float that gets carried forward for C’s standard library.

Ссылка на основную публикацию
Adblock detector