Что означает inf в c
Число с плавающей запятой — inf, но целое число не является инфой в xCode Зачем?
Вероятно, это какой-то основной вопрос. Но я не могу понять это и найти ответ.
И когда я превышаю этот предел, компилятор всегда показывает мне это самое высокое значение.
И для float его: 3.4e+38 (или минус, но это не главное)
И это дает мне такой результат:
Кто-нибудь может объяснить такое поведение? Заранее спасибо.
Решение
Другие решения
Если во время вычисления выражения результат не
математически определены или нет в диапазоне представимых значений для
его тип, поведение не определено. […]
Целые числа обычно не имеют «бесконечности» для какого-либо другого помеченного состояния. У них просто есть ценности. То, что вы делаете здесь, используя степени 2, это установка битов в 1 один за другим, имея int быть 32-битным. Это означает, что в итоге вы получите значение, которое как дополнение к двум является наименьшим значением, которое может иметь подписанное int. Если бы значение было без знака, оно было бы наибольшим. Если вы добавите к 32-битному значению значение со всеми нулями в младших 32 битах, то ничего не изменится. Таким образом, вы в конечном итоге с этим значением.
(IEEE) значения с плавающей точкой работают по-разному. У них есть флаги, обозначающие бесконечность, а не число и т. Д. Поэтому имеет смысл использовать их, когда значение выходит за пределы. Вот почему вы получаете inf, когда добавляете слишком много чисел, и значение выходит за границы.
Если вы продолжите добавлять 1 к переменной int, вы увидите, что она не останется ни в одном отдельном значении. Это переполнится и продолжит идти. Я не уверен, насколько спецификация C ++ определяет, как они должны обрабатываться, так что она может даже зависеть от реализации, но обычно значения переполняются и продолжают существовать вечно.
Русские Блоги
Суждение и использование nan и inf на языке Си
введение
При обработке и вводе и обработке данных очень вероятно возникновение чтения данных в нулевых значениях (максимальных и минимальных), знаменатель операции равен 0 или 0,0, а операция взятия логарифма 0 будет генерировать nan или inf. Этот пост предназначен для анализа работы C / C ++ для генерации nan и inf и определения того, генерируются ли nan или inf.
Причины НАН
nan: не число, что означает «недопустимое число».
Причины INF
INF: бесконечный, что означает «бесконечность».
Превышен диапазон представления чисел с плавающей запятой (переполнение, то есть часть кода заказа превышает максимально допустимое значение).
Суждение нана и инф
Откройте math.h, чтобы увидеть определение:
Способ использования и результаты:
Генерация операций Nan или Inf, используйте библиотечные функции (макро), чтобы судить
Интеллектуальная рекомендация
PS запись обучения
19.03.21 Я загрузил комплексные обучающие видеоуроки Photoshop CC 2015 и обучающие видеоуроки по новым функциям PS CC 2015. Я просмотрел несколько видео, но мне кажется, что они в основном объясняют н.
mysql _Foreign ключи, отношения сущностей и диаграммы ER
проверка данных весеннего mvc
проверка данных весеннего mvc Два способа проверки данных Spring MVC: 1.JSR303 2.Hibernate Validator Второй метод является дополнением к первому методу Шаги для проверки данных с использованием Hibern.
2. Звонки между springcloud-сервисами (RestTemplate)
1. [Экспериментальная цель] Понимать предварительный, средний, последующий порядок и иерархическую последовательность бинарных деревьев; Свяжите язык C со структурой данных двоичного дерева; Освойте с.
using namespace std;
// константы
long double epsil = 8.9; // диэлектрическая постоянная GaN
long double q = 4.80320427e-10; // величина заряда в СГСЭ
long double k = 1.380648813e-16; // константа Больцмана в СГСЭ
long double kb = 8.617332478e-5; // константа Больцмана в эВ
long double T = 300; // температура
const long double A2 = 7.86461552e-6; // константа равная 4pi*q^2/(epsil*k*T)
const long double A1 = 65.38461538; // константа равная 4pi*q/epsil
//Известные величины для p-области
long double n = 2.37e-39; // концентрация электронов в p-области
long double p = 5.26E+17; // концентрация дырок в p-области
long double na = 5.26E+17; // концентрация ионизованной примеси
//Известные величины для собственного п/п
long double ni = 5e+18; // концентрация электронов в собственном GaN
long double pi = 5e+18; // концентрация дырок в собственном GaN
const long double eps = 1.; // ошибка
long double r;
long double h = 1E-9;
long double max = 0;
const int N = 1000;// расчет размера массивов
const int N0 = 500;
//Массивы
long double psi0[N];
long double psi1[N];
long double t[N];
int main()
<
long double psi_0 = 0; // значение потенциала при х=0
long double psi_N = 65.38461538; // значение потенциала при х=х0
int iteration = 0;
psi0[0] = 0;
psi1[0] = 0;
psi0[N] = psi_N;
psi1[N] = psi_N;
// заполняем массивы числами
for (int i = 0; i eps)
<
max = fabs(r);
cout eps);
// вывод значений
for (int i = 0; i Голосование за лучший ответ
а если будешь чем-то неопределённым пользоваться, то получишь
#IND = indefinite
Учебные материалы для 2 курса
Особенности чисел с плавающей точкой
Множество значений, представимых в типах float, double и long double кроме обычных конечных значений содержит три специальных значения NaN, -Inf, Inf.
Значение NaN
Значение NaN (Not-a-Number) используется для того, чтобы сигнализировать о том, что результат некоторой операции не может быть вычислен из-за неопределенностей различного рода.
Например, операция 0.0/0.0 даст результатом NaN.
На самом деле в вещественных типах представимо целое семейство значений NaN, дополнительная информация о конкретном NaN-значении может быть использована как код ошибки.
Все функции перевода из строкового представления в вещественное значение, такие как *scanf, strtod и т. п. распознают строку NAN (независимо от регистра букв) и возвращают значение NaN.
Все функции перевода из вещественного значения в строковое представление, такие как *printf распознают значение NaN и выводят его в виде строки nan.
Результат операции с числами с плавающей точкой, такой как сложение, умножение и т. д. равен NaN, если один из аргументов операции равен NaN.
Если один из операндов операции сравнения равен NaN, операции сравнения дают следующий результат:
Чтобы проверить вещественное значение на принадлежность к классу NaN можно использовать функции fpclassify или isnan.
В силу свойств значения NaN мы будем полагать, что последовательность чисел с плавающей точкой не может быть упорядочена, если в ней содержится элемент NaN
Значения -Inf, Inf
Эти значения представляют результат «бесконечность» который может возникать при выполнениях различных операций с плавающей точкой.
Например, 1.0/0.0 дает результат Inf, а -1.0/0.0 дает результат -Inf.
Все функции перевода из строкового представления в вещественное значение, такие как *scanf, strtod и т. п. распознают строку [+|-]INF (независимо от регистра букв) и возвращают значение Inf с соответствующим знаком.
Все функции перевода из вещественного значения в строковое представление, такие как *printf распознают значение Inf и выводят его в виде строки inf с соответствующим знаком.
Значения Inf, -Inf в операциях сравнения ведут себя естественным образом, например, следующие условия истинны:
Значение Inf больше любого конечного значения, а значение -Inf меньше любого конечного значения.
Чтобы проверить вещественное значение на принадлежность к классу Inf можно использовать функции fpclassify или isinf.
Отрицательный 0
Множество значений вещественных чисел содержит два нуля: положительный и отрицательный. Когда в результате некоторых вычислений (например, при умножении или делении) получается нулевой результат, его знак вычисляется по обычным правилам и сохраняется. Поэтому в результате может получиться как обычное значение 0.0, так и отрицательное -0.0. Эти значения равны друг другу и, соответственно, больше всех отрицательных чисел и меньше всех положительных чисел.
Last modified: Friday, 21-Jun-2013 16:47:24 MSK
Alexander Chernov
Как использовать nan и inf в C?
У меня есть численный метод, который может вернуть nan или inf, если была ошибка, и для тестирования я хотел бы временно заставить его вернуть nan или inf, чтобы убедиться, что ситуация обрабатывается правильно. Есть надежный,независимый от компилятора способ создания значений nan и inf в C?
после googling около 10 минут я смог найти только зависимые от компилятора решения.
8 ответов
вы можете проверить, имеет ли ваша реализация:
существование INFINITY гарантируется C99 (или, по крайней мере, последним черновиком) и » расширяется до постоянного выражения типа float, представляющего положительный или неподписанный бесконечность, если доступно; иначе к положительной константе типа float, которая переполняется во время перевода.»
NAN может или не может быть определено, и » определяется тогда и только тогда, когда реализация поддерживает тихие NaNs для типа float. Он расширяется до постоянного выражения типа float, представляющего тихий NaN.»
обратите внимание, что если вы сравниваете значения с плавающей запятой и делаете:
ложно. Один из способов проверить, есть Ли Нэн:—16—>
C99 также имеет nan функции:
нет независимого от компилятора способа сделать это, поскольку ни стандарты C (ни c++) не говорят, что математические типы с плавающей запятой должны поддерживать NAN или INF.
Edit: Я только что проверил формулировку стандарта C++, и он говорит, что эти функции (члены шаблонного класса numeric_limits):
wiill возвращает представления NAN «если доступно». Он не расширяет то, что означает «если доступно», но предположительно что-то вроде » если реализация FP rep поддерживает их». Аналогично, существует функция:
который возвращает положительный INF rep «если доступно».
независимый от компилятора способ, но не независимый от процессора способ получить эти:
Это должно работать на любом процессоре, который использует формат с плавающей запятой IEEE 754 (что делает x86).
UPDATE: протестировано и обновлено.
это работает для обоих float и double :
изменить: Как кто-то уже сказал, старый стандарт IEEE сказал, что такие ценности должны создавать ловушки. Но новые компиляторы почти всегда выключайте ловушки и возвращайте заданные значения, потому что захват препятствует ошибке обращение.