This commit is contained in:
Andreas Fabri 2007-02-05 11:14:50 +00:00
parent 92b4520e93
commit 9fcb630967
2 changed files with 10 additions and 10 deletions

View File

@ -8,7 +8,7 @@ motivated by their well known counter parts in traditional algebra,
but we also had to pay tribute to existing types an their restrictions. but we also had to pay tribute to existing types an their restrictions.
To keep the interface minimal, To keep the interface minimal,
it was not desirable to cover all known algebraic structures, it was not desirable to cover all known algebraic structures,
e.g. we did not introduce concepts for such basic structures as {\em groups} or e.g., we did not introduce concepts for such basic structures as {\em groups} or
exceptional structures as {\em skew fields}. exceptional structures as {\em skew fields}.
\begin{figure}[htbp] \begin{figure}[htbp]
@ -58,13 +58,13 @@ fulfills is encoded in the tag
An algebraic structure is at least \ccc{Assignable}, An algebraic structure is at least \ccc{Assignable},
\ccc{CopyConstructible}, \ccc{DefaultConstructible} and \ccc{CopyConstructible}, \ccc{DefaultConstructible} and
\ccc{EqualityComparable}. Moreover, we require that it is \ccc{EqualityComparable}. Moreover, we require that it is
constructible from \ccc{int}, for any int in the range from -128 to 127. constructible from \ccc{int}, for any int in the range from \ccc{-128} to \ccc{127}.
For ease of use and since their semantic is sufficiently standard to presume For ease of use and since their semantic is sufficiently standard to presume
their existence, the usual arithmetic and comparison operators are required their existence, the usual arithmetic and comparison operators are required
to be realized via \CC\ operator overloading. to be realized via \CC\ operator overloading.
The division operator is reserved for division in fields. The division operator is reserved for division in fields.
All other unary (e.g. sqrt) and binary functions All other unary (e.g., sqrt) and binary functions
(e.g. gcd, div) must be models of the well known \stl-concepts (e.g., gcd, div) must be models of the well known \stl-concepts
\ccc{AdaptableUnaryFunction} or \ccc{AdaptableBinaryFunction} \ccc{AdaptableUnaryFunction} or \ccc{AdaptableBinaryFunction}
concept and local to the traits class concept and local to the traits class
(e.g., \ccc{Algebraic_structure_traits<AS>::Sqrt()(x)}). (e.g., \ccc{Algebraic_structure_traits<AS>::Sqrt()(x)}).
@ -74,9 +74,9 @@ two-pass template compilation problems experienced with the old design
using overloaded functions. However, for ease of use and backward using overloaded functions. However, for ease of use and backward
compatibility all functionality is also compatibility all functionality is also
accessible through global functions defined within namespace \ccc{CGAL}, accessible through global functions defined within namespace \ccc{CGAL},
e.g. \ccc{CGAL::sqrt}. This is realized via function templates using e.g., \ccc{CGAL::sqrt}. This is realized via function templates using
the according functor of the traits class. For an overview see section the according functor of the traits class. For an overview see
\ref{caf_ref::classified_refernce_pages} in the reference manual. Section~\ref{caf_ref::classified_refernce_pages} in the reference manual.
%Dispatching %Dispatching
For dispatching \ccc{Algebraic_structure_traits} provides the tags: For dispatching \ccc{Algebraic_structure_traits} provides the tags:
@ -88,7 +88,7 @@ algebraic concept a type fulfills and is one of
\ccc{Unique_factorization_domain_tag}, \ccc{Euclidean_ring_tag} or even \ccc{Null_tag} \ccc{Unique_factorization_domain_tag}, \ccc{Euclidean_ring_tag} or even \ccc{Null_tag}
in case the type is not a model of an algebraic structure concept. The tags are derived in case the type is not a model of an algebraic structure concept. The tags are derived
from each other such that they reflect the hierarchy of the algebraic from each other such that they reflect the hierarchy of the algebraic
structure concept, e.g. \ccc{Field_with_sqrt_tag} is derived from \ccc{Field_tag}. \\ structure concept, e.g., \ccc{Field_with_sqrt_tag} is derived from \ccc{Field_tag}. \\
\ccc{Is_exact} and \ccc{Is_numerical_sensitive} are both either \ccc{Tag_true} or \ccc{Tag_false}. \ccc{Is_exact} and \ccc{Is_numerical_sensitive} are both either \ccc{Tag_true} or \ccc{Tag_false}.
An algebraic structure is considered exact, An algebraic structure is considered exact,
@ -97,7 +97,7 @@ of two algebraic expressions is always correct.
An algebraic structure is considered as numerically sensitive, An algebraic structure is considered as numerically sensitive,
if the performance of the type is sensitive to the condition number of an algorithm. if the performance of the type is sensitive to the condition number of an algorithm.
%performance includes both rounding errors or runtime. %performance includes both rounding errors or runtime.
Note that there is really a difference among this two notions, e.g. the fundamental type \ccc{int} Note that there is really a difference among this two notions, e.g., the fundamental type \ccc{int}
is not numerical sensitive but considered inexact due to overflow. is not numerical sensitive but considered inexact due to overflow.
Conversely, types as \ccc{leda_real} or \ccc{CORE::Expr} are exact but sensitive Conversely, types as \ccc{leda_real} or \ccc{CORE::Expr} are exact but sensitive
to numerical issues due to the internal use of multi precision floating point arithmetic. to numerical issues due to the internal use of multi precision floating point arithmetic.

View File

@ -6,7 +6,7 @@ in particular objects defined on algebraic curves and surfaces.
As a consequence types representing polynomials, algebraic extensions and As a consequence types representing polynomials, algebraic extensions and
finite fields play a more important role in related implementations. finite fields play a more important role in related implementations.
This package has been introduced to stay abreast of these changes. This package has been introduced to stay abreast of these changes.
Since in particular polynomials must be supported by the introduces framework Since in particular polynomials must be supported by the introduced framework
the package avoids the term {\em number type}. Instead the package distinguishes the package avoids the term {\em number type}. Instead the package distinguishes
between the {\em algebraic structure} of a type and whether a type is embeddable on between the {\em algebraic structure} of a type and whether a type is embeddable on
the real axis, or {\em real embeddable} for short. the real axis, or {\em real embeddable} for short.