Типы float и int занимают одинаковое количество памяти
Тип float состоит из мантиссы (как правило, числа от нуля до единицы) и показа/ л 1 ппоказатель степеничтеля степени (т.е. мантисса*10 ), поэтому он не может точно выразить самое большое число int. (Если бы мы попытались сделать это, то не смогли бы выделить достаточно памяти для мантиссы после размещения в памяти показателя степени.) Как и следовало ожидать, переменная f представляет число 2100000009 настолько точно, насколько это возможно.
И тут важно помнить: если такая тема, как покупка бегущей строки сейчас для вас не актуальна, возможно в будущем понадобится, поэтому просто идите на этот сайт сургут.строка-бегущая.рф и там http://сургут.строка-бегущая.рф/ можно легко и доступно.
Однако последняя цифра 9 вносит слишком большую ошибку, — именно поэтому мы выбрали это число для иллюстрации. С другой стороны, когда мы присваиваем число с плавающей точкой переменной целочисленного типа, происходит усечение; иначе говоря, дробная часть — цифры после десятичной точки — просто отбрасываются. Рассмотрим пример.
float f = 2.8; int x = f;
cout << x << ‘ ‘ << f << '\n';
Значение переменной x будет равно 2. Оно не будет равным 3, как вы могли подумать, если применили “правило округления 4/5”. В языке C++ преобразование типа float в тип int сопровождается усечением, а не округлением.
Iwl При вычислениях следует опасаться возможного переполнения и усечения. Язык C++ не решит эту проблему за вас. Рассмотрим пример.
void f(int i, double fpd)
{
char c = i;
short s = i;
i = fpd; fps = i;
i = i+1; long lg = i*i;
float fps = fpd;
// да: тип char действительно представляет // очень маленькие целые числа // опасно: переменная типа int может // не поместиться
// в памяти, выделенной для переменной // типа short
// что, если число i станет максимальным? // опасно: переменная типа long не может // вместить результат
// опасно: большее число типа large может // не поместиться в типе float // усечение: например, 5.7 -> 5 // можно потерять точность (при очень // больших целых)
}
char ch = 0;
for (int i = 0; i<500; ++i)
cout << int(ch++) << '\t';
}
Если сомневаетесь, поэкспериментируйте! Не следует отчаиваться и в то же время нельзя просто читать документацию. Без экспериментирования вы можете не понять содержание весьма сложной документации, связанной с числовыми типами.
Выполните функцию g(). Модифицируйте функцию f() так, чтобы она выводила на печать переменные c, s, i и т.д. Протестируйте программу на разных значениях.
Представление целых чисел и их преобразование еще будет рассматриваться далее.
По возможности ограничивайтесь немногими типами данных, чтобы минимизировать вероятность ошибок. Например, используя только тип double и избегая типа float, мы минимизируем вероятность возникновения проблем, связанных с преобразованием double—float. Например, мы предпочитаем использовать только типы int, double и complex для вычислений, char — для символов и bool — для логических сущностей.
Остальные арифметические типы мы используем только при крайней необходимости.
Опубликовал katy
April 21 2015 09:18:47 ·
0 Комментариев ·
3769 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.