Как задать бесконечность в c
Перейти к содержимому

Как задать бесконечность в c

  • автор:

Минус бесконечность

Заполнить массив единицами и минус единицами и поменять единицы и минус единицы местами
Помогите решить задачу,не могу понять как заполнить массив единицами и минус единицами в случайном.

Бесконечность
Есть значит функция нахождения интеграла Симпсоном, мне нужно посчитать интеграл от sin(x)/x на.

Погрешность и бесконечность
Как задать в программе бесконечность(infinity) и погрешность (EPS) например для типа float?

Программа выводит бесконечность
#include <iostream> #include <cmath> using namespace std; double f(double x) < return.

Нарушитель
8936 / 4800 / 1111
Регистрация: 12.03.2015
Сообщений: 22,645

ЦитатаСообщение от VladosYetti Посмотреть сообщение

Есть аналог 0x3f3f3f3f (условная бесконечность)

Чот я не слышал про такое, хотя работаю программистом уже 20 лет.
Дай ссылку, хоть почитаю, интересно жэж.

Регистрация: 27.08.2020
Сообщений: 34

Verevkin, для алгоритмов Форда-Фолкерсона, Форда-Беллмана , Дейкстры и др. берут условно бесконечность как 10e9 или 0x3f3f3f3f. Мне просто стало интересно есть конст 0x3f3f3f3f только с минусом
Чтобы не писать какой-то моветон const int negativeINF = -0x3F3F3F3F;
https://www.google.com.ua/amp/. f3f3f/amp/

Нарушитель
8936 / 4800 / 1111
Регистрация: 12.03.2015
Сообщений: 22,645

ЦитатаСообщение от VladosYetti Посмотреть сообщение

для алгоритмов Форда-Фолкерсона, Форда-Беллмана , Дейкстры и др.
кто все эти люди?

ЦитатаСообщение от VladosYetti Посмотреть сообщение

берут условно бесконечность как 10e9 или 0x3f3f3f3f.
Мне, почему-то, кажется, что 10 9 = 0х3B9ACA00‬.

ЦитатаСообщение от VladosYetti Посмотреть сообщение

Чтобы не писать какой-то моветон const int negativeINF = -0x3F3F3F3F;
А паркуа бы не па?
Регистрация: 27.08.2020
Сообщений: 34
Verevkin, есть что-то подобное или нет?

Эксперт CЭксперт С++

11126 / 6084 / 1663
Регистрация: 18.10.2014
Сообщений: 15,294

ЦитатаСообщение от VladosYetti Посмотреть сообщение

для алгоритмов Форда-Фолкерсона, Форда-Беллмана , Дейкстры и др. берут условно бесконечность как 10e9 или 0x3f3f3f3f. Мне просто стало интересно есть конст 0x3f3f3f3f только с минусом

Что за белиберда? Никакого 0x3f3f3f3f здесь нет и никогда не было. Ничего общего между 10e9 и 0x3f3f3f3f нет. Никто никогда никакого 0x3f3f3f3f в этой роли не «брал».

Если вы хотите использовать к качестве бесконечности 10e9 , то используйте на здоровье. Тогда отрицательной бесконечностью, разумеется, будет -10e9 . Вот и все.

ЦитатаСообщение от Verevkin Посмотреть сообщение

Мне, почему-то, кажется, что 10 9 = 0х3B9ACA00‬.

10e9 = 1e10 = 0x501502f9

0х3B9ACA00‬ = 0.0047237873077392578125
0x3f3f3f3f = 0.747058808803558349609375

2771 / 1924 / 570
Регистрация: 05.06.2014
Сообщений: 5,582
Используйте std::numeric_limits::infinity() и не морочьте голову.
713 / 416 / 205
Регистрация: 19.12.2016
Сообщений: 1,665
Я в темах систем исчисления почти ноль. Но нашел вот что.

Никогда не используйте INT_MAX в качестве бесконечности для целых чисел. В некоторых алгоритмах, например, Флойда–Уоршелла, используются значения вроде ∞+w, что приведёт к переполнению при использовании INT_MAX. Вместо этого лучше использовать int oo = 0x3f3f3f3f, поскольку:

Это число достаточно большое для задач, связанных с целыми числами;
2 * oo не приведёт к переполнению;
Все байты равны, поэтому вы без проблем можете использовать memset(array, oo, sizeof(array));
Его довольно легко запомнить.

Может это поможет понять о чем просит ТС.

Эксперт CЭксперт С++

11126 / 6084 / 1663
Регистрация: 18.10.2014
Сообщений: 15,294

ЦитатаСообщение от ram876 Посмотреть сообщение

Может это поможет понять о чем просит ТС.

Ну то есть ТС, вместо того, чтобы вменяемо объяснить, что ему нужно, упомянул 10e9 и тем самым сбил всех с толку.

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

С++ и бесконечность простых чисел
Тысячи лет назад математики знали, что количество простых числ бесконечно и придумали простое.

почему в программе бесконечность получается
// ConsoleApplication11.cpp : Defines the entry point for the console application. // #include.

Машинные ноль, эпсилон и бесконечность
Здравствуйте! Помогите пожалуйста разобраться что это такое и с чем его едят? я видел на вики.

Повторять действие бесконечность раз
У меня есть одна программа С++. Там есть ветвление. Как мне сделать так, чтобы при выборе.

Бесконечность вместо чисел, coutСчитаю комплексные в цикле. z,с заданы. for(int i=0;i<20;i++) < cout << "z=" << z << '\n';.

Второй цикл у меня уходит в бесконечность! Как исправить
Напишите программу, запрашивающую у пользователя N целых чисел и выводящую на экран: а) количество.

Бесконечность double 1.#INF?

> Что из себя представляет это значение в памяти? ближайший гугл, IEEE 754 > Infinity The values +infinity and -infinity are denoted with an exponent of all 1s and a fraction of all 0s. The sign bit distinguishes between negative infinity and positive infinity. Being able to denote infinity as a specific value is useful because it allows operations to continue past overflow situations. Operations with infinite values are well defined in IEEE floating point.

21 мар 2015 в 20:59

Жаль нельзя минус поставить за коммент. На русский переводите, я же не на англ. форуме вопрос задаю. Хочется прочитать коммент на русском, а не ссылку на стандарт.

21 мар 2015 в 21:11

@manking ужасно. Вроде и ответ принес, но нет — недостаточно постарался, все-таки минус. Из чего состоит double/float? Из знака (1 бит), экспоненты (11/8 бит) и мантиссы (52/23 бит). Для значений «бесконечность» зарезервированы состояния, в которых все биты экспоненты выставлены в 1, а все биты мантиссы — в ноль. вики для стопроцентности ru.wikipedia.org/wiki/…

21 мар 2015 в 21:37

@Etki Вот так лучше. А как проверить на бесконечность, используя конструкции языка? Это возможно или нет?

21 мар 2015 в 22:02
@manking, без умения хотя бы читать и понимать английский Вам в сфере IT ничего не светит.
21 мар 2015 в 23:36

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Согласно стандарту языка C++, способ представления типов с плавающей точкой (floating-point types) определяется реализацией. Можно воспользоваться статическим членом is_iec559 шаблонного класса std::numeric_limits для проверки соответствия некоторого типа стандарту IEEE 754-2008:

std::numeric_limits::is_iec559 

Он равен true если тип соответствует требованиям IEEE 754-2008. Далее в ответе предполагается, что тип double удовлетворяет требованиям этого стандарта.

Так вот, если поделить 1.0 на 0.0 , то получится положительная бесконечность (Infinity). Один из возможных способов, которым реализация посредством std::cout может отобразить бесконечность — это 1.#INF .

Разность двух бесконечностей с одинаковым знаком — это NaN . Один из возможных способов, которым реализация посредством std::cout может отобразить NaN — это -1.#IND .

  1. Переменная ind в вашем примере равна NaN . NaN не равен ничему, включая самого себя. Вот почему выражение ind != ind равно true .
  2. Конструкцию if(ind != ind) можно использовать для проверки на NaN , но не на бесконечность. Начиная с C++11, в заголовочном файле есть функция std::isnan для проверки на NaN и функция std::isinf для проверки на бесконечность.
  3. И NaN ‘ы и бесконечности хранятся в памяти также как и все остальные числа с плавающей точкой: бит знака, биты экспоненты и биты мантиссы. Если все биты экспоненты установлены в 1 , а все биты мантиссы установлены в 0 , то это бесконечность (положительная или отрицательная, в зависимости от знакового бита). Если все биты экспоненты установлены в 1 , а среди битов мантиссы есть хотя бы один не нулевой, то это NaN .
  4. Операторы < , = , > возвращают false в случае, если по крайней мере один из операндов NaN . Поэтому все выражения ind < 5.4 , ind == 5.4 , ind >5.4 возвращают false . Бесконечности же сравниваются обычным образом: −Infinity < every_finite_number < +Infinity .

Стандарт языка C++ не особо требователен к типам с плавающей точкой. Многие аспекты поведения таких типов определяются реализацией. Например, стандарт IEEE 754-2008 разрешает, чтобы в случае, если один из операндов бинарного > — NaN , то генерировалось исключение.

При работе с числами с плавающей точкой, стоит помнить про возможные агрессивные оптимизации, которые компилятор может применить. Например, в Visual Studio, при использовании опции /fp:fast компилятор запросто может выражение pinf — pinf заменить нулём (что в случае, если pinf равен бесконечности или NaN — не верно), а выражение ind != ind заменить на false (что в случае, если ind равен NaN — не верно).

Как задать бесконечность в c

Просмотр профиля

3.12.2008, 21:25

Группа: Участник
Сообщений: 98
Регистрация: 5.10.2008
Пользователь №: 380

Репутация: 1

Есть такой вопрос. увидел в одном исходнике на паскале, что «машинную бесконечность» задали как: 1.E+30.
Как можно задать бесконечность в C++? Возможно ли это? Главное, чтобы это число было самым большим из возможных типа int.

опции профиля:

Просмотр профиля

3.12.2008, 21:52

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Репутация: 94

Цитата(++Norton++ @ 4.12.2008, 0:25)
это 4 байта

опции профиля:

Просмотр профиля

3.12.2008, 22:21

Группа: Участник
Сообщений: 98
Регистрация: 5.10.2008
Пользователь №: 380

Репутация: 1

Т.е. к примеру, какое число можно взять? Тогда 99999999 будет самым большим возможным?

Сообщение отредактировал ++Norton++ — 3.12.2008, 22:23

опции профиля:

Просмотр профиля

4.12.2008, 1:47

Группа: Участник
Сообщений: 429
Регистрация: 4.6.2008
Пользователь №: 193

Репутация: 3

самым большим будет число примерно чуть больше двух миллиардов

опции профиля:

Просмотр профиля

4.12.2008, 6:53

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Репутация: 94

вообще должны быть константы определены в инклюдах компиллера, вот только названия не помню.

нашел, см. limits.h у своего компилятора, у меня есть такие макросы:

#define SCHAR_MIN (-128)
#define SCHAR_MAX 127

#define UCHAR_MAX 255

/* TODO: Is this safe? I think it might just be testing the preprocessor,
* not the compiler itself. */
#if ('\x80' < 0)
#define CHAR_MIN SCHAR_MIN
#define CHAR_MAX SCHAR_MAX
#else
#define CHAR_MIN 0
#define CHAR_MAX UCHAR_MAX
#endif

/*
* Maximum and minimum values for ints.
*/
#define INT_MAX 2147483647
#define INT_MIN (-INT_MAX-1)

#define UINT_MAX 0xffffffff

/*
* Maximum and minimum values for shorts.
*/
#define SHRT_MAX 32767
#define SHRT_MIN (-SHRT_MAX-1)

#define USHRT_MAX 0xffff

/*
* Maximum and minimum values for longs and unsigned longs.
*
* TODO: This is not correct for Alphas, which have 64 bit longs.
*/
#define LONG_MAX 2147483647L
#define LONG_MIN (-LONG_MAX-1)

#define ULONG_MAX 0xffffffffUL

опции профиля:

Как задать бесконечность в c

т.е. это по сути задание прямой в параметрической форме (point+t*direction)
на самом деле, с математической точки зрения, если сюда добавить ограничения параметра t,
то получим возможность задавать прямую(t in (-inf, +int)), луч (t in [0, +int)), отрезок (t in [0, 1] или t in [const1, const2])
неуверенность в том, что значения inf предполагается задавать как:

double pos_inf = numeric_limitsdouble>::max(); double neg_inf = -numeric_limitsdouble>::max(); //есть ли тут какие подводные камни?

Re: +- бесконечность

От: Кодт
Дата: 08.06.10 15:55
Оценка: +4

Здравствуйте, kvser, Вы писали:

Тогда уж std::numeric_limits::infinity() или сишная константа INFINITY

Перекуём баги на фичи!
Re: +- бесконечность

От: dilmah
Дата: 08.06.10 16:11
Оценка:

K>неуверенность в том, что значения inf предполагается задавать как:
K>

K>double neg_inf = -numeric_limitsdouble>::max(); //есть ли тут какие подводные камни? K>

арифметика ieee гарантирует симметричность относительно нуля, так что вроде нормально.

Re: +- бесконечность

От: minorlogic
Дата: 08.06.10 17:27
Оценка:

Задавайте как обратный масштаб
(point+direction/t)

это широко используемый трюк.

Ищу работу, 3D, SLAM, computer graphics/vision.
Re: +- бесконечность

От: rg45
Дата: 08.06.10 20:12
Оценка: 1 (1)

Здравствуйте, kvser, Вы писали:

K>

K>double pos_inf = numeric_limitsdouble>::max(); K>double neg_inf = -numeric_limitsdouble>::max(); //есть ли тут какие подводные камни? K>

Как уже заметили, лучше в данном случае вместо max использовать infinity. И этим вполне можно пользоваться. Стандартные математические функции также нормально оперируют бесконечностями, разумеется там, где это имеет смысл:

#include #include #include const double pi = std::acos(-1.0); const double infinity = std::numeric_limitsdouble>::infinity(); double radians_to_degrees(double x) < return x * 180 / pi; > int main() < std::cout //output: 90 std::cout //output: -90 >


C++ уже затем учить надо, что он ум в порядок приводит. (с) Ломоносов М.В.
Re[2]: +- бесконечность

От: kvser
Дата: 09.06.10 07:12
Оценка:

Re[2]: +- бесконечность

От: kvser
Дата: 09.06.10 07:15
Оценка:

Здравствуйте, minorlogic, Вы писали:

M>Задавайте как обратный масштаб
M>(point+direction/t)

M>это широко используемый трюк.

не понял такого финта ушами — ведь теперь, чтобы получить начало отрезка, необходимо, чтобы t=inf

Re[3]: +- бесконечность

От: Alxndr Poluektov http://www.google.com/profiles/alexander.poluektov#buzz
Дата: 09.06.10 09:13
Оценка:

Здравствуйте, kvser, Вы писали:

M>>(point+direction/t)

K>не понял такого финта ушами — ведь теперь, чтобы получить начало отрезка, необходимо, чтобы t=inf

Или direction == 0.

Re: +- бесконечность

От: Centaur
Дата: 09.06.10 11:09
Оценка: +1

Здравствуйте, kvser, Вы писали:

K>Есть класс прямой

K>struct straight K>< K>vector point; K>vector direction; K>>;

K>т.е. это по сути задание прямой в параметрической форме (point+t*direction)

Если прямую представлять в форме A*x + B*y + C = 0, то бесконечности будут не нужны.

Re[2]: +- бесконечность

От: rg45
Дата: 09.06.10 12:18
Оценка: 1 (1)

Здравствуйте, Centaur, Вы писали:

C>Если прямую представлять в форме A*x + B*y + C = 0, то бесконечности будут не нужны.

Извините за офтопик. ИМХО, наиболее удачным по многим критериям способом представления прямой на плоскости, а также плоскости в пространстве является пара величин: 1) единичный вектор, перпендикулярный прямой(плоскости), и 2) скалярная величина, равная кратчайшему расстоянию от прямой на плоскости (или плоскости в пространстве) до начала координат. Приведенное уравнение с точностью до некоторого коэффициента как раз и содержит перечисленные величины — A и B задают вектор нормали, а C — удаленность от начала координат, только с обратным знаком.

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

dot(r, n) - d


C++ уже затем учить надо, что он ум в порядок приводит. (с) Ломоносов М.В.
Re[3]: +- бесконечность

От: kvser
Дата: 09.06.10 13:14
Оценка:

Здравствуйте, rg45, Вы писали:

R>Здравствуйте, Centaur, Вы писали:

C>>Если прямую представлять в форме A*x + B*y + C = 0, то бесконечности будут не нужны.

R>Извините за офтопик. ИМХО, наиболее удачным по многим критериям способом представления прямой на плоскости, а также плоскости в пространстве является пара величин: 1) единичный вектор, перпендикулярный прямой(плоскости), и 2) скалярная величина, равная кратчайшему расстоянию от прямой на плоскости (или плоскости в пространстве) до начала координат. Приведенное уравнение с точностью до некоторого коэффициента как раз и содержит перечисленные величины — A и B задают вектор нормали, а C — удаленность от начала координат, только с обратным знаком.

согласен, при этом
1)направляющий вектор =
2)каким образом задать луч и отрезок?
3)так как в прикладной области применения почти всегда прямая или отрезок должны строится по двум заданным точкам или по точке и направлению, то форма A*x + B*y + C = 0 не придает удобства
4)значение C равно кратчайшему расстоянию, только при условии единичного нормального вектора, а это всегда приводит к вычислению корня(потому что см. условие пункта 3), который может и не понадобиться

Re[4]: +- бесконечность

От: kvser
Дата: 09.06.10 13:35
Оценка:

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

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