Что такое inf в c
Перейти к содержимому

Что такое inf в c

  • автор:

C++ ответ выводит Inf, а не число

x находится в пределе [0.5, 1.0]
n = 10
то есть таблица должна выводиться в 10 строках
функция для решения задачи:

sin(0.5 * M_PI * x) + pow(x, 1 / 5.0)) / (sqrt(abs(cos(M_PI * x) + 1.0)) * pow(M_E, sqrt(x)) 

должно выводиться n, x, ответ функции.
Отслеживать
задан 28 сен 2021 в 9:16
3 4 4 бронзовых знака

1 ответ 1

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

При первом выполнении чему равно (x + c * n) ? Единице.

Чему, соответственно, равен cos(M_PI * (x + c * n)) ? Минус единице.

Минус единица плюс единица равно нулю.

На который вы и пытаетесь делить.

Еще вопросы есть? 🙂

P.S. Если даже не умеете работать с отладчиком, можно добавить пару инструкций вывода:

 cout  

и посмотреть, что происходит.

Документация

X = Inf возвращает скалярное представление положительной бесконечности. Операции возвращают Inf когда их результат является слишком большим, чтобы представлять как число с плавающей точкой, такое как 1/0 или log(0) .

Для с двойной точностью, Inf представляет числа, больше, чем realmax . Для с одинарной точностью, Inf представляет числа, больше, чем realmax('single') .

X = Inf( n ) возвращает n - n матрица Inf значения.

X = Inf( sz1. szN ) возвращает sz1 -. -by- szN массив Inf значения, где sz1. szN укажите на размер каждой размерности. Например, Inf(3,4) возвращает матрицу 3 на 4.

X = Inf( sz ) возвращает массив Inf значения, где вектор размера sz задает size(X) . Например, Inf([3 4]) возвращает матрицу 3 на 4.

X = Inf( ___ , typename ) возвращает массив Inf значения типа данных typename , который может быть любой 'single' или 'double' .

X = Inf( ___ ,'like', p ) возвращает массив Inf значения совпадающего типа данных, разреженности и сложности (действительный или комплексный) как p . Можно задать typename или 'like' , но не то и другое одновременно.

Примеры

Матрица Inf Значения

Создайте 3х3 матрицу Inf значения.

X = Inf(3)
X = 3×3 Inf Inf Inf Inf Inf Inf Inf Inf Inf

Трехмерный массив Inf Значения

Создайте массив 2 на 3 на 4 Inf значения и отображение его размер.

X = Inf(2,3,4); size(X)
ans = 1×3 2 3 4

Клонирование размера от существующего массива

Создайте массив Inf значения, который одного размера с существующим массивом.

A = [1 4; 2 5; 3 6]; sz = size(A); X = Inf(sz)
X = 3×2 Inf Inf Inf Inf Inf Inf

Это - общий шаблон, чтобы объединить предыдущие две строки кода в одну строку.

X = Inf(size(A));

Задайте тип данных Inf Значения

Создайте 1 3 вектор из Inf значения, элементы которых имеют тип single .

X = Inf(1,3,'single')
X = 1x3 single row vector Inf Inf Inf

Можно также задать выходной тип на основе типа другой переменной. Создайте переменную p из типа single . Затем создайте вектор из Inf значения с тем же размером и типом как p .

p = single([1 2 3]); X = Inf(size(p),'like',p)
X = 1x3 single row vector Inf Inf Inf

Входные параметры

n — Размер квадратной матрицы
целое число

Размер квадратной матрицы в виде целого числа.

  • Если n 0, затем X пустая матрица.
  • Если n отрицательно, затем это обработано как 0.

Типы данных: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

sz1. szN — Размер каждой размерности в списке
целые числа

Размер каждой размерности в списке в виде отдельных целочисленных аргументов.

  • Если размер какой-либо размерности 0, то X пустой массив.
  • Если размер какой-либо размерности отрицателен, то это обработано как 0.
  • После второго измерения, Inf игнорирует последующие измерения длины 1. Например, Inf(3,1,1) создает вектор 3 на 1 из Inf значения.

Типы данных: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

sz — Размер каждой размерности в векторе
вектор-строка из целых чисел

Размер каждой размерности в векторе в виде вектора-строки из целых чисел.

  • Если размер какой-либо размерности 0, то X пустой массив.
  • Если размер какой-либо размерности отрицателен, то это обработано как 0.
  • После второго измерения, Inf игнорирует последующие измерения длины 1. Например, Inf([3 1]) создает вектор 3 на 1 из Inf значения.

Типы данных: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

typename тип данных
'double' (значение по умолчанию) | single'

Тип данных, чтобы создать в виде 'double' или 'single' .

p — Прототип массива
массив

Прототип создаваемого массива в виде массива.

Типы данных: double | single
Поддержка комплексного числа: Да

Расширенные возможности

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Указания и ограничения по применению:

  • Размерности должны быть действительными, неотрицательными, целые числа.

Основанная на потоке среда
Запустите код в фоновом режиме с помощью MATLAB® backgroundPool или ускорьте код с Parallel Computing Toolbox™ ThreadPool .

Эта функция полностью поддерживает основанные на потоке среды. Для получения дополнительной информации смотрите функции MATLAB Запуска в Основанной на потоке Среде.

Массивы графического процессора
Ускорьте код путем работы графического процессора (GPU) с помощью Parallel Computing Toolbox™.

Указания и ограничения по применению:

  • Можно задать typename как 'gpuArray' . Если вы задаете typename как 'gpuArray' , типом лежания в основе значения по умолчанию массива является double . Создать массив графического процессора с базовым типом datatype , задайте базовый тип в качестве дополнительного аргумента перед typename . Например, X = Inf(3,datatype,'gpuArray') создает 3х3 массив графического процессора всего Inf значения с базовым типом datatype . Можно задать базовый тип datatype как одна из этих опций:
  • 'double'
  • 'single'

Для получения дополнительной информации смотрите функции MATLAB Запуска на графическом процессоре (Parallel Computing Toolbox) .

Распределенные массивы
Большие массивы раздела через объединенную память о вашем кластере с помощью Parallel Computing Toolbox™.

Указания и ограничения по применению:

  • Можно задать typename как 'codistributed' или 'distributed' . Если вы задаете typename как 'codistributed' или 'distributed' , типом лежания в основе значения по умолчанию возвращенного массива является double . Создать распределенный или codistributed массив с базовым типом datatype , задайте базовый тип в качестве дополнительного аргумента перед typename . Например, X = Inf(3,datatype,'distributed') создает 3х3 распределенный массив всего Inf значения с базовым типом datatype . Можно задать базовый тип datatype как одна из этих опций:
  • 'double'
  • 'single'

Для получения дополнительной информации смотрите функции MATLAB Запуска с Распределенными Массивами (Parallel Computing Toolbox) .

Смотрите также

Представлено до R2006a

Открытый пример

У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?

Документация MATLAB

Поддержка

  • MATLAB Answers
  • Помощь в установке
  • Отчеты об ошибках
  • Требования к продукту
  • Загрузка программного обеспечения

© 1994-2021 The MathWorks, Inc.

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

Для просмотра документации необходимо авторизоваться на сайте
Войти
Памятка переводчика

1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.

2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.

3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.

4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.

5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.

В чем ошибка в коде? C++ Пишется -inf в консоле

inf — от слова infinity, бесконечность.
Твой результат равен минус бесконечности.

А причина может быть в делении на ноль.
При делении на ноль частное равно бесконечности.

Каким образом может быть b = 0?

Я сидел и думал: чему равен синус от y=1 радиана?
Вроде положительное число. Если прибавить его к 0,5, то по-любому ноль не выйдет.

А потом я заметил:

Дело в том, что в английским языке и в языках программирования дроби записываются через точку, а не через запятую.

А в языке C++ еще веселее: есть специальный оператор «запятая».

По сути, выражение b = 0,5 + sin(y) означает примерно следующее:

«В переменную b запишите 0, а вот тут еще есть выражение 5 + sin(y), с ним ничего делать не надо, оно просто тут лежит».

Как исправить: заменить запятую в дроби на точку.

Дима АльжевУченик (230) 3 года назад
Спасибо большое, выручил.
Остальные ответы

Всё работает.

И зачем все эти промежуточные переменные?

Почему результат выводится inf?

Добрый день! Рассчитыва арифметическое выражение - сумму ряда с факториалом.. Если задаю сумму ряда длиной до 6, то все работает, если длину ряда задаю n = 6, то в консоли выскакивает вместо результата inf.

Подскажите, пожалуйста, в чем может быть проблема?

пс. факториал считается правильно.. проверяла. проблема именно в сумме ряда.

using namespace std; int factorial (int n); int main() < double sum = 0.0; int n, x; cout > n; cout > x; for (int i = 1; i cout int factorial(int n) < if (n >1) < return n * (factorial(n - 1)); >else < return 1; >>
  • Вопрос задан более трёх лет назад
  • 20195 просмотров

Комментировать
Решения вопроса 0
Ответы на вопрос 2

пс. факториал считается правильно.. проверяла. проблема именно в сумме ряда.

Проверьте еще раз, например на таком примере: factorial(36)
Вспомним, что факториал - число большое, а в int влезает не так много. А что у нас там является результатом знакового переполнения в C++, напомните?

Ответ написан более трёх лет назад
Нравится 3 8 комментариев
Мария @missbells Автор вопроса
точно))) вылазит деление на 0 из-за этого факториала, по ходу.. спасибо за подсказку!

Мария, Переведите расчет факториала на int64_t - увеличите диапазон, но, конечно всему есть предел. Так что надо опытным путем установить на каком n он наступит и ввести соответствующее ограничение.

Мария @missbells Автор вопроса

res2001, большое спасибо!! даже не знала, что такой тип данных есть.. а то пробовала long и тоже не работало. Но и int64_t при n=9 уже все ломается ))) больше, я так понимаю, уже не бывает?

Мария, Встроенных типов больше нет. Если нужно больше то придется использовать какие-либо библиотеки для работы с большими числами.
int64_t - это long long int

Мария @missbells Автор вопроса

Мария, а вот кстати если задать double factorial(), то вообще выдает факториал любого числа. просто с экспонентой )))

если задать double factorial(), то вообще выдает факториал любого числа.

Только неправильный.
double при переполнении теряет точность.
Мария @missbells Автор вопроса
terrier, а как тогда быть?

Мария, Ну, смотря, что вы хотите сделать. Если вас устроит, что максимальный факториал, который вы можете вычислить своей программой - это 20! , то используйте unsigned long long. Если же вам нужно вычислять бОльшие факториалы, то вам нужна некая реализация длинной арифметики. Например, GMP популярная библиотека для C/C++ . Ни или что-то такое

Программист на «си с крестами» и не только

У нас тут переполнение, 36! не влезает в тип int. Сделайте хотя бы double.

Inf («машинная бесконечность») — обычно результат дробного деления на ноль. Почему? Посчитаем, сколько двоек в 36!
Делятся на 2 — 18 сомножителей.
И ещё на 4 — 9 шт.
И ещё на 8 — 4 шт.
И ещё на 16 — 2 шт.
И ещё на 32 — 1 шт.
Итого в составе 36! будет 34 двойки, то есть 36! делится на 2 34 . Разумеется, целочисленная арифметика, работающая в кольце остатков от деления на 2 32 , даст ноль. При этом, разумеется, 32-битный регистр многократно и безнадёжно переполнится.

Более сложный способ расчёта ряда — рекуррентное соотношение. Очередное слагаемое поделим на две части: ai = (2i)! / i²! и bi = |x| / i²!. Постройте, как соотносятся ai−1 и ai, аналогично для b.

Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

программирование

  • Программирование
  • +4 ещё

C++ как сделать совместимую между компиляторами динамическую линковку функций?

  • 1 подписчик
  • 17 часов назад
  • 65 просмотров

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

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