cgal/Packages/Interval_arithmetic/TODO

101 lines
5.1 KiB
Plaintext
Raw Blame History

Concerning the new stuff:
-------------------------
- What to do with branches (collinearC3() and power_test()):
- The epsilon computation type should return ZERO/EQUAL as default.
This way, collinearC3() works.
- The user can provide the epsilon variant inside the source code, delimited
by special symbols /*CGAL_FILTER_BODY ... */. That's the solution for CGAL.
- Checks that the epsilons have been updated (which will not prove that
it's correct, but is better than nothing).
- New Cartesian predicates must also be in CGAL-I for the whole thing to work.
- /*DEGREE=2*/ attribute to the arguments ?
- /*CGAL_NO_FILTER*/ attribute instead of //CGAL_FILTER(BEGIN|END) ?
- Long term: match operator<(a,b) 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 that the compiler optimizes the epsilon computation
(use __attribute__((const)) for Static_filter_error operators) ?
- As Fred pointed out: the scheme is not thread safe.
- Remove the assertions in the original code.
- In case there are loops, we must take the max() of the epsilons.
This should not happen often, imho... Wait and see.
- Move static_infos in src/.
- Have a ::number_of_failure for the static filters too.
- Optimize Restricted_double, conditionnaly #define it to "double" ?
- Replace:
NEW_bound = std::max(NEW_bound, fabs(px.to_double()));
by:
if (NEW_bound < fabs(px.to_double())) NEW_bound = fabs(px.to_double());
or even, using a .bound() member function:
if (NEW_bound < px.bound()) NEW_bound = px.bound();
- Member function access for generical type should be (?):
.dbl_approx()
.bound() (basically a bound on: fabs(.dbl_approx()))
.error()
Concerning the code itself:
---------------------------
- Mark the cache as "mutable" (see Stroustrup, page 232) ?
- Replace the NT wrapping, by Filtered_Cartesian<FT>, a new kernel ?
this would be cleaner, and won't rely on some optimizations in the compiler.
(same thing for Fixed)
- Fix Michael's problem with max() and co. At least add a testcase.
- Get rid of convert_to() ? This is a mess for nothing (benchmark first).
Target convert_from_to (const Target, const Source) is fine.
It could maybe be made better this way:
void convert_from_to(Target &, const Source &) ?
Suggest that to Stefan for misc.h ?
? GYGWIN square_root_test() bug: it disappears with -O2. It's a bug in the
non-inline version of std::sqrt(). Hopefully it is fixed in CygWin 2.95.
- Essayer "attribute(noreturn)" pour overlap_action().
- Handle in_smallest_orthogonalcircle_ftC2.h correctly (needs an include)
- Essayer de bencher avec -fbranch-probabilities ? <20>a pourrait <20>tre pas mal.
- Expertiser le bench de Stefan... <20> la prochaine version.
- 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<6F>en pour calculer le cache seulement sur demande ?
(<28>a <20>vite de le faire inutilement pour les variables interm<72>diaires,
mais <20>a prend un chouia plus de place... mais en comparaison du reste...)
? 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
? See the C++ Standard numeric_limits<>, section 18.2.
? convert_to <20> faire pour: long double, long long (CGAL..._64), CLN.
- Use friend functions for operator+(IA,IA) (and others), because this way,
there's no need for a special version for double... That would simplify
the code, but I need to check it doesn't impact performance first.
- Have a look at the "function-try-blocks" ?
- Replace the macros CGAL_IA_SMALLEST/CGAL_IA_LARGEST by consts ? See if it
impacts performance before.
- The idea of an CGAL::Ieee_double, which would have corrected operators
is not so bad. It would save VC++, as well as allow to replace all the
CGAL_IA_FORCE_TO_DOUBLE. But it would perhaps impact performance and
compile time...
Concerning the script:
----------------------
- Produce separate files for declarations and definitions (=> libCGAL).
- Make it output a test file for each predicate ?
Concerning the doc:
-------------------
- In the 2.0 HTML doc, my enums are indexed twice.
probably a cc_manual compliance bug from me.
Idem, my fct to_double(Ia) is not the same as the others...
- add a pointer to my MISC'99 paper.
- Use the new doc format.
- Document CGAL_IA_STOP_CONSTANT_PROPAGATION ?
- DOCUMENT the script.
- DOCUMENT the new static stuff !!!
- Update the status of the compilers (MipsPro 7.3 and Visual/Borland).
Concerning the test-suite:
--------------------------
- Check it with GCOV again before the next public release.
- Add a simple test to check that exceptions do work indeed.
- Make a more extensive test-suite for the filtered predicates.
The script could output information to test them generically somehow.
- test NaNs (and Infs?). Comparisons with these should throw the exception...
Check that they are correctly propagated (by min(), max(), even operator*...)