Je voudrais pouvoir faire un vecteur.push_back(null) ou .push_back(nullptr) mais c'est impossible.
Voici la fonction en question tout d'abord:
std::vector<double> operator/(std::vector<double> const &vecteur_a, std::vector<double> const &vecteur_b)
{
assert(vecteur_a.size() == vecteur_b.size() && "Division impossible, les vecteurs doivent etre de meme taille");
std::vector<double> vecteur_c;
for (int i = 0; i < vecteur_a.size(); i++)
{
assert(vecteur_b[i] != 0 && "Division impossible avec un denominateur nul");
// if (vecteur_b[i] == 0)
// vecteur_c.push_back(NULL);
vecteur_c.push_back(vecteur_a[i] / vecteur_b[i]);
}
return vecteur_c;
}
Le dénominateur pouvant être nul dans certains cas de mon problème je dois retirer le assert() et rajouter une valeur disons non comparable(parce que plus tard je dois retourner le plus grand ou plus petit élément de ce vecteur). C'est pour cette raison que je souhaites faire un push_back(null ou none...).
Dans le cours lorsque le dénominateur est nul on met l'infini, ou rien du tout. Dans la comparaison si on me demande le plus petit element la comparaison se fera entre les autres elements, infini non compris a l'intérieur. En mettant 0 je peux fausser la comparaison. De plus que je ne sais pas si on demanderas le plus grand élément ou le plus petit.
// assert(vecteur_b[i] != 0 && "Division impossible avec un denominateur nul");
if (vecteur_b[i] == 0)
vecteur_c.push_back(std::numeric_limits<double>::quiet_NaN());
C'est bon maintenant. Merci.
Autre question qui n'a rien a voir s'il vous plait. J'ai une fonction qui affiche les éléments d'un vecteur. Je veux afficher des std::vector<double> <std::size_t> et meme <int>. Je me retrouve avec 03 fonctions qui font strictement la même chose. par quoi puis-je remplacer ces types pour avoir une seule et meme fonction?
Au lieu de mettre 3 fonctions avec le type exact. Utilise le nom que tu veux à la place de int/double/..., typiquement T, et rajoute devant la fonction: "template <typename T>". Mets ça dans un .h, et voilà, tu as ta première fonction générique (template).
Question, ne voudrais-tu pas rejeter cette division membre à membre si le vecteur "dénominateur" contient des 0? N'est-ce pas une erreur de programmation de la part de l'appelant?
>Question, ne voudrais-tu pas rejeter cette division membre à membre si le vecteur "dénominateur" contient des 0? N'est-ce pas une erreur de programmation de la part de l'appelant?
Non c'est un cas rencontré dans la résolution du simplexe. C'est pas l'utilisateur qui entre ces valeurs, ce genre de division peut arriver.
>Au lieu de mettre 3 fonctions avec le type exact. Utilise le nom que tu veux à la place de int/double/..., typiquement T, et rajoute devant la fonction: "template <typename T>". Mets ça dans un .h, et voilà, tu as ta première fonction générique (template).
On peut tout à fait diviser des doublequand le dénominateur est nul. on obtient alors un résultat qui peut être +Infini, -Infini ou bien NaN pour le cas 0./0.. Ensuite tu peux vérifier que le doubleobtenu est viable en le testant avec la fonction std::isfinite(x) qui retourne truesauf si le nombre est un infini ou NaN.
On peut tout à fait diviser des doublequand le dénominateur est nul. on obtient alors un résultat qui peut être +Infini, -Infini ou bien NaN pour le cas 0./0...
Dis comme ca c'est comme si cette division par 0 était connue et gérée par le compilateur, ce qui n'est pas le cas
On peut tout à fait diviser des doublequand le dénominateur est nul. on obtient alors un résultat qui peut être +Infini, -Infini ou bien NaN pour le cas 0./0...
Dis comme ca c'est comme si cette division par 0 était connue et gérée par le compilateur, ce qui n'est pas le cas
- Edité par Asmitta il y a 16 minutes
Le standard IEEE754 pour les nombres flottants utilisé partout de nos jours autorise complètement la division par zéro et le résultat est bien défini (±a/0. = ±inf et 0./0. = NaN). Par contre une division entière par zéro c'est undefined behavior.
Oui merci. Mes divisions entre double marchaient pas parce que en fait elles ne même s'exécutaient pas (assert()).
Merci encore
Ajouter une valeur nulle a un vecteur
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
Discord NaN. Mon site.
En recherche d'emploi.