Какой тип данных вещественные числа
unsigned long long
Запоминать предельные значения, особенно для 4-х или 8-ми байтовых целых, вряд ли стоит, достаточно знать хотя бы какого порядка могут быть эти значения, например, тип int — приблизительно 2 · 10 9 .
На практике рекомендуется везде использовать основной целый тип, т.е. int . Дело в том, что данные основного целого типа практически всегда обрабатываются быстрее, чем данные других целых типов. Короткие типы ( char , short ) подойдут для хранения больших массивов чисел с целью экономии памяти при условии, что значения элементов не выходят за предельные для этих типов. Длинные типы необходимы в ситуации, когда не достаточно типа int .
Символьные типы
В стандарте C++ нет типа данных, который можно было бы считать действительно символьным. Для представления символьной информации есть два типа данных, пригодных для этой цели, — это типы char и wchar_t , хотя оба эти типа по сути своей вообще-то являются целыми типами. Например, можно взять символ ‘A’ и поделить его на число 2. Кстати, а что получится? Подсказка: символ пробела. Для «нормальных» символьных типов, например, в Паскале или C#, арифметические операции для символов запрещены.
Тип char используется для представления символов в соответствии с системой кодировки ASCII (American Standard Code for Information Interchange — Американский стандартный код обмена информации). Это семибитный код, его достаточно для кодировки 128 различных символов с кодами от 0 до 127. Символы с кодами от 128 до 255 используются для кодирования национальных шрифтов, символов псевдографики и др.
Тип wchar_t предназначен для работы с набором символов, для кодировки которых недостаточно 1 байта, например, Unicode. Размер типа wchar_t обычно равен 2 байтам. Если в программе необходимо использовать строковые константы типа wchar_t , то их записывают с префиксом L , например, L «Слово».
Логический тип
Логический (булевый) тип обозначается словом bool . Данные булевого типа могут принимать только два значения: true и false . Значение false обычно равно числу 0, значение true — числу 1. Под данные булевого типа отводится 1 байт.
Вещественные типы
Особенностью вещественных (действительных) чисел является то, что в памяти компьютера они практически всегда хранятся приближенно, а при выполнении арифметических операций над такими данными накапливается вычислительная погрешность.
Имеется три вещественных типа данных: float , double и long double . Основным считается тип double . Так, все математические функции по-умолчанию работают именно с типом double . В таблице ниже приведены основные характеристики вещественных типов:
Диапазон абсолютных величин
Точность, количество десятичных цифр
Типы данных
В процессе программирования программист имеет дело с информацией, представляющей из себя пять основных типов: целые числа, вещественные числа, символы и строки символов, булевские данные и указатели.
Целые числа — это числа, с помощью которых Вы учились считать (1, 5, -21 и 752, например).
Вещественные числа имеют дробные части (3.14159) и экспоненты (2.579×10**24). Они также известны как числа с плавающей точкой.
Символы — это любые буквы алфавита, символы и цифры 0-9. Они могут использоваться отдельно (а, z, !, 3) или объединяться в символьные строки (‘Это только проверка’).
Булевские выражения имеют только два значения: TRUE или FALSE (истина или ложь). Они используются в условных выражениях.
Указатели — это адреса ячеек памяти, содержащих информацию.
Целые числа.
В стандартном Паскале целочисленный тип определяется в пределах от -MaxInt до MaxInt, где MaxInt — набольшее возможное целое значение, допустимое для процессора.
В Turbo Pascal поддерживается целочисленный тип MaxInt = 32,767, допуская значение -32,768. Переменная целочисленного типа занимает 2 байта.
В Turbo Pascal, кроме того, поддерживается четыре других целочисленных типов данных, каждый из которых имеет свой диапазон значений.
+Таблица 2.1. Целочисленные типы данных. ------------------------------------------------------------ Тип Диапазон Размер в байтах ------------------------------------------------------------ Byte 0..255 1 (целое длиной в байт) Shortint -128..127 1 (короткое целое) Integer -32768..32767 2 (целое) Word 0..65535 2 (длиной в слово) Longint -2147483648..2147483647 4 (длинное целое) -----------------------------------------------------------
Заключение: Turbo Pascal позволяет использовать шестнадцатиричные целые значения (основание 16). При описании шестнадцатиричной константы перед ней указывается знак доллара $, например $27=39.
+Вещественный тип данных.
В стандартном Паскале тип Real представляет значение с плавающей точкой, содержащее мантиссу и экспоненту — степень числа 10.
Количество значащих цифр в мантиссе и диапазон значений экспоненты зависят от компьютера. В Turbo Pascal данные вещественного типа Real имеют размер в 6 байт, с 11 значащими цифрами, мантиссы и экспоненты от 10**-38 до 10**38.
Кроме того Turbo Pascal поддерживает стандарт IEEE 754 для двоичной арифметики с плавающей точкой. В этом случае добавляются типы данных с Single, Double, Extended и Comp:
Single — размер 4 байта, допускается 7 значащих цифр и диапазон экспоненты от 10**-45 до 10**38;
Double — размер 8 байт, допускается 15 значащих цифр и диапазон экспоненты от 10**-324 до 10**308;
Extended — размер 10 байт, допускается 19 значащих цифр и диапазон экспоненты от 10**-4951 до 10**4931.
Если у вас есть процессор 8087, и включена работа с числовым сопроцессором (), Turbo Pascal генерирует инструкции 8087 для поддержки этих типов и выполнения всех операций с плавающей точкой на 8087.
Если у Вас нет 8087, но Вы хотите использовать IEEE типы, Вы можете указать Turbo Pascal эмулировать процессор 8087, разрешая и эмуляцию 8087 и обработку с плавающей точкой (директивы ). Turbo Pascal подключает специальную библиотеку, которая выполняет операции с плавающей точкой, так же как процессор 8087.
Таблица 2.2 Вещественные типы данных. ------------------------------------------------------------------- Тип Диапазон Значение Размер в цифры байтах ------------------------------------------------------------------- Real 2.9х10Е-39..1.7х10Е38 11-12 6 (вещественный) Single(с одинар- 1.5х10Е-45..3.4х10Е38 7-8 4 ной точностью) Double(с двойной 5.0х10Е-324..1.7х10Е308 15-16 8 точностью) Extended(повышен- 1.9х10Е-4951..1.1х10Е4932 19-20 10 ной точности) Comp(сложный) -2Е+63+1..2Е+63-1 19-20 8 *Comp - только целые значения ----------------------------------------------------- Вызовем редактор Turbo Pascal и заведем программу: program DoRatio; var A, B: Integer; Ratio: Real; begin Write('Enter two numbers: '); Readln(A, B); Ratio := A div B; Writeln('The ratio is ', Ratio) end.
Сохраним ее в файле DORATIO.PAS с помощью функции основного меню File/Save As. Нажмите ALT-R для компиляции и запуска программы. Введем два значения, 10 и 3, и получим результат 3.000000.
Ожидая ответа 3.3333333333, мы получили результат 3. Получили такой результат, потому что был использован оператор «div» для деления целых чисел.
Исправим оператор «div» на Ratio := A / B; сохраним код (F2), откомпилируем и выполним. Новый результат 3.3333333333, как и ожидали. Оператор деления «/» обеспечивает более точный результат.
+Символьные и строковые типы данных.
Научившись записывать числовые данные, выучим запись и использование символьных и строковых данных. Паскаль позволяет определять тип Char, имеющий размер в один байт и содержащий один символ. Символьные константы содержат один символ, заключенный в апострофы (‘A’,’e’,’г’,’2′). Заметим, что ‘2’ означает символ 2, а 2 означает целое число 2 (и 2.0 — вещественное число) .
program DoRatio; var A, B: Integer; Ratio: Real; Ans: Char; begin repeat Write('Enter two numbers: '); Readln(A, B); Ratio := A / B; Writeln('The ratio is ', Ratio); Write('Do it again? (Y/N) '); Readln(Ans); until UpCase(Ans) = 'N'; end.
После вычисления коэффициента, выдается сообщение:
Do it again? (Y/N). (Повторить? (Да/Нет)).
Программа находится в состоянии ожидания одного из указанных символов и нажатия клавиши «Enter». Если Вы нажмете «n» или заглавную «N», то условие «until» будет выполнено и цикл закончится. В случае, если Вы ответите «Y» («y»), то выполнение цикла будет продолжено.
«N» и «n» не одно и тоже, потому что они имеют различные значения в коде ASCII. Каждый символ имеет свой код ASCII, представленный 8-битным значением (символ занимает 1 байт). Приложение B в Руководстве программиста содержит список кодов ASCII для всех символов.
В Turbo Pascal существуют два дополнительных способа описания символьных констант: с помощью символа «^» и символа числа «#».
Символы с кодами от 0 до 31 — управляющие символы. Они обозначаются аббревиатурами (CR — возврат каретки, LF — перевод строки, ESC — выход) или с помощью двух клавиш, одна из которых Ctrl + буква. Значение буквы получается прибавлением 64 к управляющему коду.
Например, управляющий символ кода ASCII 7 известен как Bel или CtrlG. Turbo Pascal дает возможность представить символы с помощью «^», за которым следует буква (или символ). Так, «^G» то же самое, что и Ctrl-G. «^G» можно использовать в операторах Turbo Pascal: Writeln (^G). Этот метод применим только к управляющим символам.
Вторая возможность обозначения — использование символа номера «#», за которым следует код ASCII. Так, #7 то же самое, что и «^G», #65 — ‘A’, a #233 — один из специальных псевдографических символов IBM PC.
В большинстве случаев используются строки символов. В стандартном Паскале не поддерживается тип строк символов. В Turbo Pascal реализована эта возможность. Рассмотрим программу
program Hello; var Name: String(30); begin Write('What is your name? '); Readln(Name); Writeln('Hello, ', Name) end.
Переменная Name объявлена, как string (строка), и под нее резервируется 30 байт (для 30 символов). Кроме того, Turbo Pascal отводит еще один байт, в котором содержится текущая длина строки. В этом случае, независимо от того, какой длины будет введено имя, оператор Writeln распечатает имя указанной длины. Если будет введено имя больше 30 символов, то будут использоваться только первые 30 символов, а остальные будут проигнорированы.
При описании строковой переменной можно указывать ее размер, но не более 255. По умолчанию длина строковой переменной — 255 символов.
Turbo Pascal предлагает несколько процедур и функций, работающих со строковыми переменными. Их описание дано в главе 1 Справочного руководства по библиотеке.
+Булевские данные.
Встроенный тип Boolean данных в Turbo Pascal имеет два возможных значения: True и Falsе (истина и ложь). Можно объявить переменную типа Boolean, и присвоить ей значение True или False, или же, что более важно, присвоить ей значение выражения, которое при вычислении принимает одно из этих значений.
Булевское выражение — это выражение, которое принимает значение True или False.
Оно состоит из выражений отношений, булевских операторов, булевских переменных и/или других булевских выражений. Например:
while содержит булевское выражение. Булевское выражение в этом случае все, что находится между ключевыми словами while и do. Done — это переменная (или функция) булевского типа.
+Указатели.
Все рассмотренные типы данных содержат непосредственно данные. Указатель, содержащий другой тип информации — адрес. Указатель — это переменная, содержащая адрес памяти, где какие либо данные помещаются. Другими словами, он указывает на данные, как адресная книга или оглавление.
Обычно указатель указывает на данные определенного типа. Расмотрим следующий пример:
type Buffer = string[255]; BufPtr = ^Buffer; var Buf1: Buffer; Buf2: BufPtr;
Тип данных Buffer определен, как строковая переменная размером 255 байт, в то же время BufPtr — указатель на Buffer. Переменная Buf1 имеет тип Buffer и занимает (255+1) байт памяти. Переменная Buf2 имеет тип BufPtr, это 32-битовый адрес и занимает 4 байта памяти.
Куда указывает Buf2? В данный момент никуда. Прежде чем использовать BufPtr, необходимо зарезервировать (распределить) память и запомнить ее адрес в Buf2. Вы делаете это, используя процедуру New:
Поскольку Buf2 указывает на тип Buffer, то этот оператор выделит в памяти 256-байтовый буфер и его адрес поместит в Buf2.
Как использовать Buf2 и данные, на которые он указывает? С помощью оператора ^. Например, необходимо поместить строку и в Buf1 и в буфер, на который указывает Buf2:
Buf1 : = 'Эта строка помещается в Buf1'; Buf2^: = 'Эта строка помещается по указателю Buf2';
Отметим различие между Buf2 и Buf2^: Buf2 означает 4-байтовую переменную указателя; Buf2^ — 256-байтовую строковую переменую, адрес которой в Buf2.
Теперь, как освободить память, на которую указывает Buf2? Используя процедуру Dispose. Эта процедура освобождает память. После того, как при помощи Dispose освобождена память, следует присвоить указателю значение nil, т.е. указатель ни на что не указывает:
Dispose(Buf2); Buf2 := nil;
Заметим, что значение nil присваивается указателю Buf2, а не Buf2^.
Какой тип данных вещественные числа
Числовые данные разделяются на точные и приближенные, на целые и вещественные. В отдельную категорию можно отнести битовые значения.
| Тип | Объем памяти | Диапазон |
|---|---|---|
| TINYINT | 1 байт | от -128 до 127 (от -2 7 до 2 7 -1) от 0 до 255 (от 0 до 2 8 -1) |
| SMALLINT | 2 байта | от -32768 до 32767 (от -2 15 до 2 15 -1) от 0 до 65535 (от 0 до 2 16 -1) |
| MEDIUMINT | 3 байта | от -2 23 до 2 23 -1 от 0 до 2 24 -1 |
| INT INTEGER (синонимы) |
4 байта | от -2 31 до 2 31 -1 от 0 до 2 32 -1 |
| BIGINT | 8 байт | от -2 63 до 2 63 -1 от 0 до 2 64 -1 |
Целые числа могут быть объявлены с ключевым словом UNSIGNED . В этом случае элементам данного столбца нельзя будет присвоить отрицательные значения, а допустимый диапазон, которые принимает тип удваивается. Так, тип TINYINT может принимать значения от -128 до 127, а TINYINT UNSIGNED — от 0 до 255.
| Тип | Диапазон |
|---|---|
| DEC[(M,D)] DECIMAL[(M,D)] (синонимы) |
Зависит от параметров M и D |
Тип DECIMAL хранит точное вещественное значение данных. Он используется, когда точность является критически важной. Например, при хранении финансовых данных.
MySQLCREATE TABLE Users ( ... salary DECIMAL(5,2) );В данном примере объявляется, что в колонке salary будут хранится числа, имеющие максимум 5 цифр, причём 2 из которых отведены под десятичную часть. То есть, в данной колонке будут храниться значения в промежутке от -999.99 до 999.99.
Синтаксис DECIMAL эквивалентен DECIMAL(M) и DECIMAL(M,0) . По умолчанию, параметр M равен 10.
Целая часть и часть после точки хранятся как 2 отдельных целых числа. На основании этого факта можно легко рассчитать затрачиваемый объем памяти. Так у DECIMAL(5,2) целая часть содержит 3 цифры и занимает 2 байта, часть после точки 2 цифры - достаточно 1 байта. Итого, на хранение будет потрачено 3 байта.
Тип Объем памяти Диапазон BIT[(M)] M бит От 1 до 64 битов, в зависимости от значения M BOOL
BOOLEAN
(синонимы)1 бит Либо 0, либо 1 Числовые типы с плавающей запятой (справочник по C#)
Числовые типы с плавающей запятой представляют действительные числа. Все числовые типы с плавающей запятой являются типами значений. Они также представляют собой простые типы и могут быть инициализированы литералами. Все числовые типы с плавающей запятой поддерживают арифметические операторы, а также операторы сравнения и равенства.
Характеристики типов с плавающей запятой
C# поддерживает следующие предварительно определенные типы с плавающей запятой:
Ключевое слово или тип C# Приблизительный диапазон значений Точность Размер Тип .NET float От ±1,5 x 10 −45 до ±3,4 x 10 38 6–9 цифр 4 байта System.Single double от ±5,0 × 10 −324 до ±1,7 × 10 308 15–17 цифр 8 байт System.Double decimal от ±1,0 x 10 -28 до ±7,9228 x 10 28 28-29 знаков 16 байт System.Decimal В приведенной выше таблице каждый тип ключевого слова C# из крайнего левого столбца является псевдонимом для соответствующего типа .NET. Они взаимозаменяемые. Например, следующие объявления объявляют переменные одного типа:
double a = 12.3; System.Double b = 12.3;По умолчанию все типы с плавающей запятой имеют значение 0 . Все типы с плавающей запятой имеют константы MinValue и MaxValue с минимальным и максимальными итоговыми значениями этого типа. Типы float и double также предоставляют константы, обозначающие бесконечные и нечисловые значения. Например, тип double предоставляет следующие константы: Double.NaN, Double.NegativeInfinity и Double.PositiveInfinity.
Тип decimal подходит, если требуемая степень точности определяется числом цифр справа от десятичной запятой. Такие числа обычно используются в финансовых приложениях для денежных сумм (например, 1,00 долл. США), процентных ставок (например, 2,625 %) и т. д. Даже числа, точные только до одной десятичной цифры, точнее обрабатываются типом decimal : 0,1, например, можно в точности представить экземпляром decimal . При этом не существует экземпляра double или float , который точно представляет 0,1. Из-за этой разницы в числовых типах в арифметических вычислениях могут возникать непредвиденные ошибки округления при использовании double или float для десятичных данных. Вы можете использовать double вместо decimal , если оптимизация производительности важнее, чем обеспечение точности. Но любая разница в производительности останется незамеченной для всех приложений, кроме самых требовательных к вычислениям. Еще одна возможная причина, по которой следует избегать decimal , — это минимальные требования к хранилищу. Например, ML.NET использует float , так как разница между 4 байтами и 16 байтами суммируется для очень больших наборов данных. Для получения дополнительной информации см. System.Decimal.
В одном и том же выражении можно сочетать и целочисленные типы, и типы float и double . В этом случае целочисленные типы неявно преобразуются в один из типов с плавающей запятой. При необходимости тип float неявно преобразуется в double . Выражение вычисляется следующим образом.
- Если в выражении есть тип double , оно оценивается как double или bool в реляционных сравнениях или сравнениях на равенство.
- Если в выражении нет типа double , оно оценивается как float или bool в реляционных сравнениях или сравнениях на равенство.
Можно также смешивать целочисленные типы и тип decimal в выражении. В этом случае целочисленные типы неявно преобразуются в тип decimal , а выражение вычисляется как decimal или bool в реляционных сравнениях и сравнениях на равенство.
Тип decimal нельзя смешивать с типами float и double в выражении. В этом случае, если требуется выполнить арифметические операции или операции сравнения или равенства, необходимо явно преобразовать операнды из типа или в тип decimal , как показано в следующем примере:
double a = 1.0; decimal b = 2.1m; Console.WriteLine(a + (double)b); Console.WriteLine((decimal)a + b);Можно использовать строки стандартных числовых форматов или строки пользовательских числовых форматов для форматирования значения с плавающей запятой.
Вещественные литералы
Тип реального литерала определяется его суффиксом следующим образом:
- Литерал без суффикса или с суффиксом d или D имеет тип double .
- Литерал с суффиксом f или F имеет тип float .
- Литерал с суффиксом m или M имеет тип decimal .
В приведенном ниже коде показан пример каждого из них.
double d = 3D; d = 4d; d = 3.934_001; float f = 3_000.5F; f = 5.4f; decimal myMoney = 3_000.5m; myMoney = 400.75M;В предыдущем примере также показано использование _ в качестве разделителя цифр. Цифровой разделитель можно использовать со всеми видами числовых литералов.
Можно также использовать экспоненциальное представление, то есть указать экспоненту вещественного литерала, как показано в следующем примере:
double d = 0.42e2; Console.WriteLine(d); // output 42 float f = 134.45E-2f; Console.WriteLine(f); // output: 1.3445 decimal m = 1.5E6m; Console.WriteLine(m); // output: 1500000Преобразования
Существует только одно неявное преобразование между числовыми типами с плавающей запятой: из float в double . Однако можно преобразовать любой тип с плавающей запятой в любой другой тип с плавающей запятой с помощьюявного приведения. Для получения дополнительной информации см. статью Встроенные числовые преобразования.
Спецификация языка C#
Дополнительные сведения см. в следующих разделах статьи Спецификация языка C#:
- Типы с плавающей запятой
- Тип decimal
- Вещественные литералы
См. также
- справочник по C#
- Типы значений
- Целочисленные типы
- Строки стандартных числовых форматов
- Числовые значения в .NET
- System.Numerics.Complex
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.