cgal/Packages/Interval_arithmetic/TODO

125 lines
6.5 KiB
Plaintext

- Real/Expr: ? 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.
- Implanter la propal pour modular ?
Ça devra se faire un jour anyway, de porter le code au C++...
- Voir si on pourrait faire un filtre "static adaptatif" avec le NT d'Olivier
qui calcule la borne d'erreur, et mes scripts (voir si y'a pas trop de
branches, etc...).
Concerning the new stuff:
- New Cartesian predicates must also be in CGAL-I for the whole thing to work
properly (NO_FILTER_SECTION).
- A __NO_FILTER attribute would be better ? These are needed (like built-ins)
for the new adaptative stuff.
- Integrate into Filtered_Exact<>.
- Offer static filtering facilities.
- What to do with branches... Treat those predicates by hand ?
Or automatically with some guidance ?
CollinearC3 is the only example, but it would be nice to have a way to
detect it at compile-time.
The user could provide _in place_ the alternative epsilon version...
- Long term: match operator< and co ?
- # of bounds : one per predicate, or one per argument ? give choice.
- # of epsilons: one per predicate, or one set per sub-predicate ? choice.
- Check the compiler optimizes the epsilon computation
(use __attribute__((const)) for Static_filter_error operators) ?
- Note that there a conflict right now between the $new_protect_macro...
- Document the script (before I forget what's inside...)
Concerning the code itself:
- Offer the possibility to push out of the predicates the rounding mode
changes, and then add checks (rounding==up) there.
- Use "Self" in all my classes to denote the class name as typedef.
- There's a next_after(double) required by IEEE. It would be nicer for the
conversion functions, compared to +min_double...
- Write include/CGAL/predicates/README to say what I want.
avec un main.h que je sources depuis Arithmetic_filter.h...
- Investigate sqrt() bug on CygWin (no idea... does it call a buggy lib fct ?)
- Concerning in_smallest_orthogonalcircle_ftC2.h, it needs some #include at
the end for the overloading (when it's more mature), same thing for
Arithmetic_filter.h (could this be automated ?). Same thing for Regular T3D.
- Est-ce que les spécialisations doivent être sous CVS ?
- Essayer de bencher avec -fbranch-probabilities ? Ça pourrait être pas mal.
- Expertiser le bench de Stefan.
- Interval_nt doesn't need to be fast => no inline => libCGAL ?
- Drop the class Interval_nt ? It's 230 lines for nothing...
Or have a boolean template parameter, instead or the derivation ?
- 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).
(ça a l'air bien chiant, plutôt décrire vaguement dans la thèse, et
implanter les filtres "statiques adaptatifs").
- 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 ?
- 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.
? 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
- Sparc 64 support (Solaris 2.7 only for the moment): cf glibc-2.1.1
- In the future: see the C++ Standard numeric_limits<>, section 18.2.
Concerning the script:
- Have command line options:
"--static-filter" for the new filter scheme.
"--only-marked-functions" to process only stuff inside CGAL_FILTER_BEGIN/END.
(similar to expcomp)
- 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.
- Parser des declarations sans definition ?
Concerning the doc:
- Dans la doc html de CGAL-2.0, mes enums sont répertoriés 2 fois dans
l'index, sûrement un bug de cc_manual compliance de ma part.
de même plus loin, ma fct to_double(Ia) n'est pas pareille que les autres.
- RV: "documenter le mécanisme pour les prédicats? Il me semblerait utile de
rajouter une section d'introduction ou bien à la fin du chapitre, pour
expliquer comment utiliser les filtres. Peut-être une référence à ton
chapitre sur l'arithmétique d'intervalles..."
- add a pointer to my MISC'99 paper.
- document overlap_action(), when it is made customisable.
- Passer au nouveau format de doc.
- Document CGAL_IA_STOP_CONSTANT_PROPAGATION ?
- Document the script !!!
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 *).