Что означает 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, используйте библиотечные функции (макро), чтобы судить

Интеллектуальная рекомендация

Что означает inf в c. Смотреть фото Что означает inf в c. Смотреть картинку Что означает inf в c. Картинка про Что означает inf в c. Фото Что означает inf в c

PS запись обучения

19.03.21 Я загрузил комплексные обучающие видеоуроки Photoshop CC 2015 и обучающие видеоуроки по новым функциям PS CC 2015. Я просмотрел несколько видео, но мне кажется, что они в основном объясняют н.

Что означает inf в c. Смотреть фото Что означает inf в c. Смотреть картинку Что означает inf в c. Картинка про Что означает inf в c. Фото Что означает inf в c

mysql _Foreign ключи, отношения сущностей и диаграммы ER

Что означает inf в c. Смотреть фото Что означает inf в c. Смотреть картинку Что означает inf в c. Картинка про Что означает inf в c. Фото Что означает inf в c

проверка данных весеннего mvc

проверка данных весеннего mvc Два способа проверки данных Spring MVC: 1.JSR303 2.Hibernate Validator Второй метод является дополнением к первому методу Шаги для проверки данных с использованием Hibern.

Что означает inf в c. Смотреть фото Что означает inf в c. Смотреть картинку Что означает inf в c. Картинка про Что означает inf в c. Фото Что означает inf в c

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 сказал, что такие ценности должны создавать ловушки. Но новые компиляторы почти всегда выключайте ловушки и возвращайте заданные значения, потому что захват препятствует ошибке обращение.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *