cgal/Packages/Interval_arithmetic/TODO

103 lines
5.4 KiB
Plaintext

- CLN: finish the wrapper(s) [and add the converters]. (+doc)
- Real/Expr: idem. See also http://www.cs.nyu.edu/exact/core/.
- Implanter les optimisations suivantes compatibles IEEE 754 dans egcs:
- (-a)*(-b) => a*b (idem pour /)
- (-a)>0 => a<0
- (-a)+b => b-a ...
- (-a)*b => -(a*b) ssi -ffast-math
- bug à fixer: cf get_empiric_rounding_mode(), où "volatile" est nécessaire.
- Comment intégrer ces foutus pré-calculs ? Faire un draft de propal.
- Faire aussi une propal précise pour include/CGAL/Predicates/*.
- Faire une propal pour modular (après avoir vu/benché leda_modular).
- Voir si on pourrait faire un filtre static avec le NT d'Olivier, et mes
scripts (voir si y'a pas trop de branches, etc...).
Concerning the code itself:
- PENSER a virer include/CGAL/determinant.h.
- Try long double bounds on Intel, and make benchmarks. If it isn't too slow,
then it'll be better, because it won't need the "force to mem" workaround.
- Stop constant propagation (could be considered a compiler bug, or
misfeature). It's not specific to Intel, it would be nice if egcs had
better control over that (work on that ?). It can easily be fixed by
"CGAL_IA_FORCE_TO_DOUBLE" in the constructors.
- On Intel, due to lack of IEEE support, after each critical operation, I need
to "CGAL_IA_FORCE_TO_DOUBLE". Would be nice if egcs had a good option for
that.
- Drop the class Interval_nt ? Or have a boolean template parameter, instead
or the derivation ?
- FPU_get_and_set_cw (), c'est plus joli, et ça peut être plus efficace.
- Filter_Cache: Faire des benchs, et une test-suite qui soit raisonnable.
Hum, rajouter un booléen pour calculer le cache seulement sur demande ?
(ça évite de le faire inutilement pour les variables intermédiaires,
mais ça prend un chouia plus de place... mais en comparaison du reste...)
Utiliser plutôt Tag_true/Tag_false si possible.
- sign_det_2x2() optimisé pour l'IA (+ bench de triangulation).
(et régler le sort de include/CGAL/Interval_arithmetic/determinant.h.)
include/CGAL/Interval_arithmetic/determinant.h has no header.
Header check failed for include/CGAL/Interval_arithmetic/determinant.h.
Creating a default header.
- Workarounds (pour MipsPro [et M$VC]):
- specializations partielles: vérifier que c'est bien le bon CGAL_CFG_..
que j'utilise.
NB: si on linke 2 .o comme ça => multiple def...
- The convert_to workaround could be enabled even for all compilers ?
It would simplify the code, but: slow down ? still work for Quotient ?
- g++ 2.8.1 n'a pas l'air de supporter: Filter<Quotient<Gmpz>,Quotient<Gmpz>>.
- Vérifier que EGCS optimise les expressions x*IA(1), IA(1)*x, x*IA(0), etc...
C'est apparemment loin d'être le cas. Il inline, mais laisse les tests...
Il n'a pas l'air de propager les constantes à travers IA(1), même s'il
inline !!!
- Avoir un flag dynamic (static member) qui dit si exception ou pas, voire un
function pointer pour overlap_action() ?
Et modifier le comportement dans les fonctions save/restore ?
- converter (long longs), (long doubles)... au moins documenter que c'est pas
supporté pour le moment. Hint: (double) +/- 1ulp.
? try if __attribute__((const)) for GNU on my operators is ok, and speed up ?
what about putting it on predicates too ?
? Currently, some types (leda_*, GMP) need the rounding to nearest for doing
the conversion to Interval. That's bad because double doesn't, and is the
case that must be optimized. Maybe have a Tag for each NT saying if/how it
needs the rounding to do the conversion ?
Remark: the fast case is for the builtin types, so others (that care of the
rounding mode) can be slowed down...
? SUN: Add "-Wa,-xarch=v8plus" to fix the following "error":
/usr/ccs/bin/as: "/var/tmp/ccBHnU0T.s", line 861: warning: 3 instructions
required between ldfsr and next FBfcc; nops inserted
In which case is it produced ? I can't see it anymore.
Concerning the script:
- Add determinant_signs.h to the list of filtered files ? And send the 3
lines to Stefan to add to the end of the original determinant.h.
- Produire un fichier avec juste les déclarations, et un autre avec les
définitions, ça aidera à faire une library séparée de trucs précompilés.
- Add a comment for the parser script, e.g. /*No_Filter*/, because some
predicates don't need to be filtered (compare_x, lexico,..)..
Or try to guess when parsing ? Anyway for the filtered constructions, the
scheme will have to be rethought.
? Clean it up, and comment it...
Concerning the doc:
- change the status of homogeneous predicates when available...
- faire un fichier long_description comme ça doit se faire.
- Tell the status for MipsPro (the workaround about partial specializations).
(#define CGAL_IA_ET, CGAL_IA_CT... cf tst5.C).
- add a pointer to my MISC'99 paper.
- Document "IA::number_of_failures".
- Documenter le mécanisme de cache.
- Passer au nouveau format de doc.
Concerning the test-suite:
- CGAL_IA_DEBUG ne marche pas sur sparc (FPU_get_cw ne rend pas ce qu'il
faut...).
- Refaire un petit coup de GCOV, pour voir où ça en est.
- test-suite: rajouter un test simple qui vérifie que les exceptions marchent.
- Faire une test-suite un peu plus extensive des filtres. En particulier les
types templatés, etc...
- test new converter functions ? [use flag -DCGAL_IA_DEBUG]
- test NaNs (and Infs?). Comparisons with these should throw the exception...
Et vérifier s'ils sont bien propagés correctement (par min/max, ou même *).