CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Class Complexe

KeepSmile
KeepSmile
Niveau 4
26 février 2007 à 18:13:59

Bonjour,

Je viens de développer une class Complexe qui a pour but de réaliser des opérations sur les nombres complexe tel que l´addition, soustraction, multiplication et division.
Elle dispose aussi de méthode comme pour récupérer l´argument et le module d´un nombre complexe.

Enfin trève de bavardage, je vous laisse examiner tout ceci :).
Il risque surement d´y avoir de grosse grosse erreurs mais merci de me le faire parvenir :D.

ps : je n´ai pas vérifié le cas de la division par zèro, mais je pense le faire plus tard.

lien :
http://perso.orange.fr/leirbag/Complexe.zip

Fvirtman
Fvirtman
Niveau 10
26 février 2007 à 18:18:43

Fort sympathique ! :-)

LGV
LGV
Niveau 28
26 février 2007 à 21:40:15

bon debut ;

1/ la forme canonique n´est pas complete
2/ code non const-correct
3/ accesseurs non standard
4/ operateurs _= non standard
5/ utiliser les lists d´init
6/ utiliser le return value optim

pour etre tatillon :
- code peu efficace par endroit
- forcer l´alignement
- si temps critique, vectoriser les calculs

apres on peut regarder le detail ; c´est une critique globale, donc on prend ce qu´on veut :)

KouicKouic
KouicKouic
Niveau 6
26 février 2007 à 21:52:38

Perso, je trouve que de répartir l´implémenation sur plusieurs fichier n´améliore pas la clartée du code.

De plus, question qui me turlupine :
Ne faut il pas :
"return *new Complexe(m_nReel, -m_nImaginaire);"
ne fait il pas un trou de memoire si on ne fait pas de "delete" ?

KeepSmile
KeepSmile
Niveau 4
26 février 2007 à 21:59:45

LGV :

Merci pour ces critiques dont je tiendrais compte et dont je vais modifier le code en conséquence. Il y a juste un point que je comprends pas c´est :

- forcer l´alignement

KouicKouic :

En ce qui concerne l´implémentation de plusieurs fichiers, c´est une habitude que je commence à prendre afin de ne pas avoir un fichier qui tiend sur plus de 4 000 lignes de code, et c´est beaucoup plus pratique pour réaliser les Test Unitaire par la suite :), enfin à mon avis c´est au gout de la personne, c´est vrai que ca peut être très moche pour certains et très bien pour d´autre :).

Et en ce qui concerne le new, tu as tout à fait raison, c´est une erreur de ma part (j´avais prévenu :d) et je vais en tenir compte lors des prochaines modifications.

godrik
godrik
Niveau 30
26 février 2007 à 22:39:38

en passant je ferai noter:
if(resultat.ModuleCarre() < 0.00000001)
return true;
Il existe dans la lib c++, une facon de récupérer la plus petite valeure stockable en flottant. Je pense qu´il s´agit également de la borne pour etre conforme à flottant(qui est de l´ordre de 10 -7)
Tu peux l´obtenir avec numeric_limits<float>::epsilon()
j´imagine qu´il est defini egalement sur les double.

KeepSmile
KeepSmile
Niveau 4
28 février 2007 à 00:13:18

Donc j´ai essaié d´arranger la class (je n´ai pas fini de modifier tout, en ce qui concerne les remarques tel que la forme canonique)

lien :
http://perso.orange.fr/leirbag/Complexe.zip

LGV :

- J´ai standardisé les accesseurs

- Code const-correct je pense maintenant :)

- J´utilise les listes d´initialisations, même si j´ai vu que c´était inutile pour les types de base (int, cehar, double ...etc) mais je préfére le faire par cohérence

- operator _= supprimé, par contre ils sont devenus standart je crois depuis la dernière norme de C++, enfin à vérifier :)

- Calcul vectoriser pour un gain de temps (je pense que j´en ai pas oublié)

Sinon le reste j´ai pas trop touché, je pense que la dernière chose que je ferais c´est la forme canonique

KouicKouic :

Rajoute des delete comme convenu :)

godrik :

Merci pour l´astuce, je ne connaissais pas du tout cette librairie :), j´ai donc effectué le changement et effectivement il existe un epsilon pour les double.

KouicKouic
KouicKouic
Niveau 6
28 février 2007 à 01:17:35

Je n´ai pas vraiment regarder le code, mais lorsque je vois une ligne comme (tiré du main.cpp):
delete c3;
*c3 = c1 - c2;
je sais qu´il y a un probleme.

Pourquoi utiliser new dans tes surcharges d´opérateur ? Cela complique inutilement les choses.

KeepSmile
KeepSmile
Niveau 4
28 février 2007 à 12:36:42

Bonjour, je suis bien obligé car si je passerai pas par un new dans mes surcharges d´operator, mon objet serai détruit par la suite donc il me serait impossible de chainer mes surcharges.

Exemple sans new :

ob1 = ob2 + ob3; // Marche
ob1 = ob2 + ob3 + ob4; // Marche pas

Exemple avec new :

ob1 = ob2 + ob3; // Marche
ob1 = ob2 + ob3 + ob4; // Marche

Je te l´accorde la synthax est loin d´être belle mais si quelqu´un à une solution je suis totalement preneur :)

KeepSmile
KeepSmile
Niveau 4
28 février 2007 à 13:47:16

Hop, je rerépond en cause de ma faute :(, tu as tout à fait raison, même si ma technique est juste elle est loin d´être bien (appel de constructeur + allocation sur le tas), j´avais appris à éviter d´appeler le constructeur par recopie mais je viens de m´apercevoir que pour chainer des objets, on est obligé ! donc j´ai édité le lien avec le nouveau code source sans new et delete :), et je m´en escuse encore ;)

En tous cas merci KouicKouic, d´avoir insister dessus, ca m´a permis de comprendre certaines choses :)

godrik
godrik
Niveau 30
28 février 2007 à 13:51:46

je penses que kufa nous a présenter (il y a un peu de temps) une technique pour eviter ces recopies en utilisant des fonctions template.
Mais c´est assez compliqué a comprendre.

LGV
LGV
Niveau 28
28 février 2007 à 19:43:22

pour reference, un article de gamedev expose cette technique d´optim du code de sortie par templates

kufa
kufa
Niveau 9
01 mars 2007 à 18:37:35

Oui mon code est juste une implementation amelioree et etendue de cet article (je dois avoir mis le lien dans mon code de toute facon).
Je travaille sur une version sse (et xboite), mais ca optimise pas autant que je voudrait, j´y travaille! :) (pour info, il ne faut pas utiliser les const references avec les __m128 sinon il ya du load/save sur la stack)

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment