Bonjour,
La question que je pose porte sur l'éventuelle spécification dans la norme du c++ (et surtout la prochaine norme) de l'implémentation des nombres.
Code : Sélectionner tout - Visualiser dans une fenêtre à part std::complex<T>
En effet, beaucoup de codes numériques issus du fortran pré-supposent que un nombre complexe est implémenté en mémoire comme étant la suite de deux nombres de type T, le premier représentant la partie réelle et l'autre la partie imaginaire.
Une interprétation "objet" de std::complex, qui serait défini par son interface laisserait la possibilité de le représenter d'une manière quelconque. (par exemple module et angle ou encore autre chose).
En revanche le type complex du C99 spécifie lui aussi une représentation en mémoire comme la succession de la partie réelle et imaginaire.
Un intérêt d'une telle représentation est qu'un tableau de double de taille 2*n peut être utilisé comme un container n éléments de type complex à l'aide d'un. Une référence sur un type complexe peut donc facilement être obtenue en changeant les parties imaginaires et réelles "en place". Par exemple, c'est l'hypothèse qui est faite par dans l'ouvrage numerical recipes, dans le chapitre sur la FFT.
Code : Sélectionner tout - Visualiser dans une fenêtre à part reinterpret_cast
Ce problème fait l'objet d'un post de Grosse-Kunstleveet David Abrahams ici:
http://www.open-std.org/jtc1/sc22/wg...002/n1356.html
A la connaissance des auteurs du posts, même si celà n'est pas spécifié dans la norme de 98, tous le compilateurs font une représentation des std::complex autorisant cette confusion.
D'autres liens à ce propos:
http://www.open-std.org/jtc1/sc22/wg...004/n1589.html
http://anubis.dkuug.dk/jtc1/sc22/wg2...ctive.html#387
Si vous savez ce qu'il en est pour la prochaine norme du c++ finalement, ça m'intéresse beaucoup.
Par ailleurs, que pensez-vous d'un code C++ qui ferait déjà cette supposition sur la représentation du std::complex, au sens ou ça fonctionne sous C99 et sur les compilateurs connus ?
S.
Partager