Je mettais en œuvre un algorithme numérique raisonnablement compliqué. Il contient quelques exponentielles, parmi lesquelles j'ai découvert, lors de l'impression du résultat intermédiaire, qu'il y avait des débordements de double. Cependant, le terminal imprime inf
(pas Inf
ou NaN
), et il semble que ce ne soit pas un double, pas même le double minimum ou maximum exprimable. Mais il semble que inf
se comporte comme s'il s'agissait du système de nombres réels étendus (la perspective que l'infini positif et négatif soit considéré comme un vrai nombre, plutôt qu'une abréviation de déclaration impliquant des limites).Est-ce que C++ std's inf se comporte exactement comme un infini commun-sensuel
J'ai effectué un test: (g ++ version: "la version d'Apple LLVM 8.0.0 (clang-800.0.42.1)")
#include <iostream> // cout
#include <cmath> // exp, log
#include <limits> // data ranges
int main(void)
{
const double dMin =std::numeric_limits<int>::min();
const double dMax =std::numeric_limits<int>::max();
double p1 =std::exp(710);
double p2 =std::exp(750);
double p3 =std::exp(800);
double p4 =-std::log(0.0);
std::cout << "p1 :=std::exp(710) =" << p1 << '\n';
std::cout << "p2 :=std::exp(750) =" << p2 << '\n';
std::cout << "p3 :=std::exp(800) =" << p3 << '\n';
std::cout << "p4 :=-std::log(0.0) =" << p4 << '\n';
std::cout << "does p1==dMax? " << ((p1==dMax) ? "yes" : "no") << '\n';
std::cout << "does p1==-dMin? " << ((p1==-dMin) ? "yes" : "no") << '\n';
std::cout << "does p1==p2? " << ((p1==p2) ? "yes" : "no") << '\n';
std::cout << "does p2==p3? " << ((p2==p3) ? "yes" : "no") << '\n';
std::cout << "does p3==p4? " << ((p3==p4) ? "yes" : "no") << '\n';
std::cout << "does 3*p1==p2/2+1? " << ((3*p1==p2/2+1) ? "yes" : "no") << '\n';
std::cout << "does (-p1)*(-p2)==p3*p3*p3? " << (((-p1)*(-p2)==p3*p3*p3) ? "yes" : "no") << '\n';
std::cout << "does std::log(p2)==std::exp(p3)? " << ((std::log(p2)==std::exp(p3)) ? "yes" : "no") << '\n';
}
Sortie:
p1 :=std::exp(710) =inf
p2 :=std::exp(750) =inf
p3 :=std::exp(800) =inf
p4 :=-std::log(0.0) =inf
does p1==dMax? no
does p1==-dMin? no
does p1==p2? yes
does p2==p3? yes
does p3==p4? yes
does 3*p1==p2/2+1? yes
does (-p1)*(-p2)==p3*p3*p3? yes
does std::log(p2)==std::exp(p3)? yes
Il semble que inf
ressemble à notre concept de l'infini, mais n'est pas égal à max et min de std.
Est-il sûr, alors, de supposer que inf
fonctionne de la même manière que l'infini sens commun? Puis-je compter sur les opérations dans les étapes intermédiaires de mon algorithme qui implique inf
, en prenant pour être l'infini vrai, et ne traitent que ses résultats à la fin? Ou sinon, devrais-je l'attraper? Mais comment puis-je, puisque ce n'est pas le double maximum ou minimum?
« l'infini tombe sous le sens », je trouve qu'il est difficile de contenir mon rire en ce moment: D – George
bien que je ne suis pas natif utilisateur anglais QQ – Aminopterin
^^ ce ne sont pas les Anglais, juste l'affirmation qu'il existe un sensical infini. – George