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

Calcul formel

Chaos_Clad
Chaos_Clad
Niveau 10
20 septembre 2006 à 19:20:32

Ouais et au vu de tout ce que j´ai à apprendre et maîtriser avant même de songer à l´algorithme de mon programme, j´ai pas mal de boulot ^^ Bon, j´ai enfin trouvé à quoi allaient me servir les heures d´allemand :-d

wiiwooman
wiiwooman
Niveau 6
23 septembre 2006 à 21:28:48

j´ai pas mal travaillé sur le sujet et il faut effectivement te creer un petit analyseur lexical et syntaxique. pour ça, tu dois d´abords te creer une grammaire de ton language mathematique.
Le language C est très bien adapté. Tu peux utiliser C++ si tu considères les éléments de ta grammaire comme des objets mais ce n´est absolument pas obligatoire.
Si tu veux trouver de plus amples renseignement là dessus je te conseille de regarder du coté de la création de compilateur.

godrik
godrik
Niveau 30
24 septembre 2006 à 13:00:17

il y a beaucoup trop de chose dans la création de compilateur qui dépassent clairement son problème.
Regardes du coté des expressions régulières puis des grammaires hors contexte.

Chaos_Clad
Chaos_Clad
Niveau 10
26 septembre 2006 à 20:18:48

Pouh j´ai vraiment pas de temps à moi ^^ J´ai juste pu voir sur un tuto chopé sur dvpez.com ce qu´étaient les arbres (enfin les bases des bases).
Je veux juste savoir une chose, est-il nécessaire que j´apprenne les surcharges ? Je veux pas me lancer dans un truc qui me prendra du temps si ça ne me servira à rien.
Encore merci pour votre aide :-)))

godrik
godrik
Niveau 30
27 septembre 2006 à 01:09:38

non, la surcharge est probablement inutile. Ca apporte une ecriture sympathique, mais rien d´impératif. (AMHA bien sur)

Tueur2Legumes
Tueur2Legumes
Niveau 4
28 septembre 2006 à 22:58:13

« Je veux juste savoir une chose, est-il nécessaire que j´apprenne les surcharges ? Je veux pas me lancer dans un truc qui me prendra du temps si ça ne me servira à rien. »

Je comprend pas comment un mec intéressé par les maths peut dire ça :D

godrik
godrik
Niveau 30
28 septembre 2006 à 23:41:59

justement quelqu´un intéréssé par les maths (devrait) se rends bien compte que c´est foutrement pareil... surcharge ou pas, ce n´est que du sucre syntaxique.

Chaos_Clad
Chaos_Clad
Niveau 10
29 septembre 2006 à 06:27:55

Ouais mais les maths ça prend pas de temps ^^
Bon : arbre, Lex&Yacc. Ca me fait déjà un sacré boulot, ne serait-ce que pour maîtriser les arbres à fond.
Merci, je m´y mets dès ce week-end :)

Fvirtman
Fvirtman
Niveau 10
29 septembre 2006 à 09:45:27

Moi j´aime bien les surcharges d´opérateurs, mais pas a tout va quand meme.

Car y´a quand meme un piege.
Imagine que vous ayez une classe Vecteur (qui a toute l´arithmétique vectorielle surchargée)
(j´en ai une, j´avoue qu´elle est tres pratique, quand meme, donc la critique que je vais faire ne vient pas du fond du coeur, c´est juste pour faire l´avocat du diable)

Vous faites :

Vecteur i;
Vecteur j;
Vecteur k;
double a;
double b;
.....

k = a*i+k*j;

Dans la derniere ligne, entre les opérations, les créations de vecteurs temporaires, et les recopies, il n´est pas trivial d´évaluer une complexité. Voila ou est le piege, une telle ligne appelle finalement pas mal de fonctions, et peut ralentir dans certains cas.
(bon, si je manipule des vecteurs qui, en interne, ont juste 3 double, pas trop de soucis), mais si je fais l´arithmétique matricielle et que je manipule des matrices 200*200, la, je vais souffrir...

Voila, c´était une petite parenthese sur les opérateurs :)

Fvirtman
Fvirtman
Niveau 10
29 septembre 2006 à 09:46:13

*

k = a*i+b*j;

(ben, on fait tous des erreurs de frappe, lol)

godrik
godrik
Niveau 30
29 septembre 2006 à 10:12:17

personnelement, je déteste la redéfinition d´opérateur parcequ´elle ne fait jamais ce que je veux.
Par exemple, Il est difficile de munir un espace d´un ordre partiel.
On estime généralement que les opérateurs < et >= ne renvoye pas la meme valeur. Ou encore que >= renvoye la valeur de > || ==. Ce qui n´est pas vrai quand on considere des ordres partiels.

On peut également avoir a redéfinir plusieurs opératuer de multiplication. typiquement produit scalaire et vectoriel. Certes tu va dire que tu peux toujours prendre un autre opérateur que *. Tu peux choisir . ou encore ^. Mais ces opérateurs ont déja plus ou moins un sens.
Cela nous amène a des ´std::cout << "toto" << std::iosjesaisplusquoi::hex;´

On peut également être amener a redéfinir des opérateurs qui introduisent des confusions énorme, comme l´opérateur + sur des string pour faire de la concaténation. Pour moi + est un opérateur commutatif (c´est a dire que a+b = b+a), ce qui n´est pas vrai pour la concaténation.

Bref, je n´aime pas trop la redéfinition d´opérateur...

godrik
godrik
Niveau 30
29 septembre 2006 à 10:18:46

En fait, en y repensant, j´aime bien la redéfinition de l´opérateur () parcequ´il n´introduit pas de confusion je trouve.
On a UN objet qui représente UNE fonction (éventuellement une classe de fonction pour pouvoir prendre un nombre variable de paramètre)

kufa
kufa
Niveau 9
29 septembre 2006 à 13:27:46

les operateurs peuvent etre bien pratiques pour optimiser, et que l´on ne veut pas ecrire bcp de noms de fonctions.
Par exemple une bonne utilisation des templates (cf mon implementation okay-ish a
http://potages.googlepages.com/sources) permet de ne pas creer d objets temporaires et de diminuer l´utilisation de la stack pour une operation du type k = a*i+b*j; alors que ca aurait bcp bcp plus long a ecrire sans les operateurs.

kufa
kufa
Niveau 9
29 septembre 2006 à 13:28:20

http://potages.googlepages.com/sources meme

Tueur2Legumes
Tueur2Legumes
Niveau 4
29 septembre 2006 à 20:11:56

« les operateurs peuvent etre bien pratiques pour optimiser, et que l´on ne veut pas ecrire bcp de noms de fonctions. »

La surcharge d´opérateurs ne permet pas d´optimiser quoi que ce soit, non ? Soit on s´est mal compris, soit je ne suis pas d´accord avec toi (je me doutais que je ne serais pas d´accord avec quelqu´un qui écrit "bcp" :-° ).

godrik
godrik
Niveau 30
29 septembre 2006 à 21:34:11

en effet la redéfinition d´opérateur n´optimise rien du tout. Ce que les opérateurs calculs aurait du etre calculé autremnet.
Par contre ca permet plus facilement de reprendre du code template déjà écris.

Kufa, je ne suis pas bien sur d´avoir compris, tu te sers des template pour faire un genre d´arbre d´évaluation a la compilation que tu evalue de facon itérative et du coup sans objet temporaire, c´est ca ?

kufa
kufa
Niveau 9
29 septembre 2006 à 22:50:42

oui clairement les operateurs n optimisent rien, mais ils aident a l ecriture, et ce bcp lorsqu on optimise (a l aide de template par exemple).

@godrik: mon code est une version un peu plus safe et cross-platforme d un article (gamedev?), bizarre que je l ai pas mentionne, je vais regarder dans mon sourcesafe car je suis sur que j avais le lien dans mes commentaires. L article etait tres bien, et expliquait en profondeur tout cela.

Mon code a deux principaux objectifs:
- ne pas avoir d objets temporaires lorsqu on peut s en passer
- evaluer les x,y,z separement, et une seule fois (si possible) par expression (pour eviter de devoir sauver des variables sur la pile)
Ca se fait a l´aide de template: l´idee est de travailler sur des expressions a la place de vecteurs. Par exemple si tu as k= a*i+b*j; comme cite plus haut, voici ce qui se passe (en simplifie, et dans l ordre)

a*i -> cree un vec_exp2<vector3d,float,mul> (appelons ca expA)

b*j -> cree un vec_exp2<vector3d,float,mul> (expB)

expA*expB -> cree un vec_exp2<type de expA,type de expB,mul> (expC)

k = expC va appeller une fonction inline, qui va evaluer d abord expC.evaluate(0) pour x, expC.evaluate(1) pour y, etc.
Comme tout est inline et comme on utilise partout des references constantes, aucune des expressions n est vraiment stockee en memoire/stack, ce qui est bien pratique. Le code source en sortie est bien impressionant par rapport a une implementation habituelle, par contre si on veut faire du simd cette version est pourrie.
Sans les operateurs, ca deviendrait vraiment tres moche a ecrire.. vraiment..

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