Résoudre polynome de degré 2 - Algo - Programmation
Marsh Posté le 09-11-2010 à 18:57:30
Ben ... oui. La technique du discriminant.
Tu mets ton équation sous la forme ax² + bx + c = 0. Ensuite tu calcules delta = b² - 4ac (le discriminant):
Si delta < 0, aucune solution
Si delta = 0, une solution qui est -b / 2a
Si delta > 0, deux solutions: -b + sqrt(delta) / 2a et -b - sqrt(delta) / 2a
C'est tout
Marsh Posté le 09-11-2010 à 19:10:06
Ok, c'est précisément ce que je cherchais à éviter. Tant pis pour moi.
Marsh Posté le 09-11-2010 à 22:55:55
parce que le calcul du discriminant à lui tout seul fait 3 multiplications et que l'extraction de chaque racine fait 1 division et une racine carré commune, ce qui fait beaucoup, surtout quand on doit en résoudre 100 000 à la suite. Une solution magique du genre de celle là : http://en.wikipedia.org/wiki/Fast_inverse_square_root m'aurait vachement aidé.
Marsh Posté le 10-11-2010 à 00:20:57
Et en parallélisant le calcul des 100000?
Marsh Posté le 10-11-2010 à 08:50:29
Quelles sont tes contraints de vitesse et/ou de hardware?
parce que le calcul en python d'100,000 solutions prend 0.16 sec. Si apres c'est trop lent, peut être que tes équations ont une certaine structure qui te permettrait d'accélerer cela.
Marsh Posté le 10-11-2010 à 08:57:48
snafu8, t'es sur que ton hotspot est la ? ca me parait grandement chelou
Marsh Posté le 10-11-2010 à 10:26:19
breizhbugs a écrit : Et en parallélisant le calcul des 100000? |
Inutile. Même avec beaucoup de coeurs, son prog va passer plus de temps à gérer les threads qu'à faire les 2-3 opérations.. surtout vu les ALUs des CPUs actuels..
Marsh Posté le 10-11-2010 à 12:12:58
esox_ch a écrit : |
y'a toujours la possibilité de splitter en "gros" batch (tout est relatif), et si c'est quelque chose à faire régulièrement et que le thread est précréé, que son architecture matérielle est effectivement threadée, ca peut aider.
Sinon, il y a toujours aussi les habituelles questions de cache.
Bref, il faudrait déjà un peu mieux connaitre le contexte
Marsh Posté le 12-11-2010 à 14:10:28
Effectivement, j'en ai parlé avec Joel F hors forum et c'est la solution qui ressort, faire un batch de 16N systemes et vectoriser tout ca, puis utiliser les résultats des systemes pour traiter des machins. Le truc, c'est que, par systeme, j'ai beaucoup trop de données pour pouvoir faire un seul gros tas et tout traiter en meme temps et que je cherchais une methode purement algo pour en résoudre un seul rapidement.
@mr_simon, 0.16 seconde, ç fait 6 itérations par secondes, si on considère que c'est pas le seul processing que je dois embarquer...
Marsh Posté le 09-11-2010 à 18:26:51
Salut à tous,
est-ce qu'à votre connaissance, il existe une méthode rusée et magique pour résoudre les équation du deuxieme degré, qui m'évite de calculer à chaque fois de faire une tripotée de multiplications/divisions ?