Сравнивая Бесконечность - PullRequest
2 голосов
/ 28 марта 2019

При поиске значения бесконечности я обнаружил, что: В случае Python 3.7 INFINITY > INFINITY - 1 возвращает False и возвращает то же самое, если мы делаем INFINITY < INFINITY - 1.

В случае C ++ я получаю тот же результат, что и False.

Это происходит потому, что у нас нет правильного определения для INFINITY? Прямо сейчас мы просто знаем, что это просто огромное число, и мы не можем сказать, что INFINITY начинается после некоторого определенного числа 'X'.

Возвращаясь к проблеме: Теперь некоторое число x явно больше, чем x-1. Почему это не так с INFINITY?

Код Python:

A = float('inf')
B = float('inf')

print(A > B-1) # returns False
print(A < B-1) # returns False

C ++ код:

#include <iostream>
#include <limits>
using namespace std;

int main() {
    double a = numeric_limits<double>::infinity();
    double b = numeric_limits<double>::infinity();

    if (a>(b-1)){cout<<"TRUE";}
    else {cout<<"FALSE"<<endl;} //returns else part- FALSE

    if (a<(b-1)){cout<<"TRUE";}
    else {cout<<"FALSE";} //returns else part- FALSE

    return 0;
}

Для любого другого number = 10, number > number - 1 вернет True и number < number - 1 вернет False.

Ответы [ 2 ]

2 голосов
/ 28 марта 2019

Думая арифметически, утверждение верно, что x < x - 1.Однако компьютеры «так думают» не так.Числа с плавающей точкой страдают от ограниченной точности.Даже это не имеет места:

print(1e90 < 1e90 - 1)  # False
print(1e90 == 1e90 - 1)  # True

Это потому, что 1e90 - 1 округляется до 1e90 при использовании двойной точности.

Нечто подобное происходит при работе с infinity ценности.Перед сравнением вычисляется выражение inf - 1.Что оценивает - inf - 1? представляет собой только одно значение, представляющее положительную бесконечность , поэтому inf - 1 оценивается как inf.

Следовательно, когда вы сравниваете inf < inf - 1, вы фактически сравниваете inf < inf, и поэтомуВы получаете False.

0 голосов
/ 28 марта 2019

Бесконечность - это не число, не, по крайней мере, реальное / сложное число.Он не может быть представлен как одно значение в математических областях.Таким образом, не имеет смысла выполнять арифметику на «бесконечности» или сравнивать ее с чем-либо.

Но смелые инженеры IEEE действительно стандартизировали один способ представления бесконечности в своих стандартах с плавающей запятой.Их видение «бесконечности» должно быть четко определено в IEEE-754.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...