1 // Copyright (c) 1999
2 // Utrecht University (The Netherlands),
3 // ETH Zurich (Switzerland),
4 // INRIA Sophia-Antipolis (France),
5 // Max-Planck-Institute Saarbruecken (Germany),
6 // and Tel-Aviv University (Israel).  All rights reserved.
7 //
8 // This file is part of CGAL (www.cgal.org)
9 //
10 // $URL: https://github.com/CGAL/cgal/blob/v5.3/Kernel_23/include/CGAL/predicates/sign_of_determinant.h $
11 // $Id: sign_of_determinant.h 0779373 2020-03-26T13:31:46+01:00 Sébastien Loriot
12 // SPDX-License-Identifier: LGPL-3.0-or-later OR LicenseRef-Commercial
13 //
14 //
15 // Author(s)     : Sylvain Pion
16 //                 Stefan Schirra
17 
18 #ifndef CGAL_PREDICATES_SIGN_OF_DETERMINANT_H
19 #define CGAL_PREDICATES_SIGN_OF_DETERMINANT_H
20 
21 #include <CGAL/determinant.h>
22 #include <CGAL/number_utils_classes.h>
23 #include <CGAL/number_type_basic.h>
24 
25 namespace CGAL {
26 
27 template <class RT>
28 inline
29 typename Sgn<RT>::result_type
sign_of_determinant(const RT & a00,const RT & a01,const RT & a10,const RT & a11)30 sign_of_determinant( const RT& a00,  const RT& a01,
31                         const RT& a10,  const RT& a11)
32 {
33   return enum_cast<Sign>(CGAL_NTS compare( a00*a11, a10*a01));
34 }
35 
36 template <class RT>
37 inline
38 typename Sgn<RT>::result_type
sign_of_determinant(const RT & a00,const RT & a01,const RT & a02,const RT & a10,const RT & a11,const RT & a12,const RT & a20,const RT & a21,const RT & a22)39 sign_of_determinant( const RT& a00,  const RT& a01,  const RT& a02,
40                         const RT& a10,  const RT& a11,  const RT& a12,
41                         const RT& a20,  const RT& a21,  const RT& a22)
42 {
43   return CGAL_NTS sign(determinant(a00, a01, a02,
44                                          a10, a11, a12,
45                                          a20, a21, a22));
46 }
47 
48 template <class RT>
49 inline
50 typename Sgn<RT>::result_type
sign_of_determinant(const RT & a00,const RT & a01,const RT & a02,const RT & a03,const RT & a10,const RT & a11,const RT & a12,const RT & a13,const RT & a20,const RT & a21,const RT & a22,const RT & a23,const RT & a30,const RT & a31,const RT & a32,const RT & a33)51 sign_of_determinant(
52  const RT& a00,  const RT& a01,  const RT& a02,  const RT& a03,
53  const RT& a10,  const RT& a11,  const RT& a12,  const RT& a13,
54  const RT& a20,  const RT& a21,  const RT& a22,  const RT& a23,
55  const RT& a30,  const RT& a31,  const RT& a32,  const RT& a33)
56 {
57   return CGAL_NTS sign(determinant(a00, a01, a02, a03,
58                                          a10, a11, a12, a13,
59                                          a20, a21, a22, a23,
60                                          a30, a31, a32, a33));
61 }
62 
63 template <class RT>
64 CGAL_KERNEL_LARGE_INLINE
65 typename Sgn<RT>::result_type
sign_of_determinant(const RT & a00,const RT & a01,const RT & a02,const RT & a03,const RT & a04,const RT & a10,const RT & a11,const RT & a12,const RT & a13,const RT & a14,const RT & a20,const RT & a21,const RT & a22,const RT & a23,const RT & a24,const RT & a30,const RT & a31,const RT & a32,const RT & a33,const RT & a34,const RT & a40,const RT & a41,const RT & a42,const RT & a43,const RT & a44)66 sign_of_determinant(
67  const RT& a00,  const RT& a01,  const RT& a02,  const RT& a03,  const RT& a04,
68  const RT& a10,  const RT& a11,  const RT& a12,  const RT& a13,  const RT& a14,
69  const RT& a20,  const RT& a21,  const RT& a22,  const RT& a23,  const RT& a24,
70  const RT& a30,  const RT& a31,  const RT& a32,  const RT& a33,  const RT& a34,
71  const RT& a40,  const RT& a41,  const RT& a42,  const RT& a43,  const RT& a44)
72 {
73   return CGAL_NTS sign(determinant(a00, a01, a02, a03, a04,
74                                          a10, a11, a12, a13, a14,
75                                          a20, a21, a22, a23, a24,
76                                          a30, a31, a32, a33, a34,
77                                          a40, a41, a42, a43, a44));
78 }
79 
80 template <class RT>
81 CGAL_KERNEL_LARGE_INLINE
82 typename Sgn<RT>::result_type
sign_of_determinant(const RT & a00,const RT & a01,const RT & a02,const RT & a03,const RT & a04,const RT & a05,const RT & a10,const RT & a11,const RT & a12,const RT & a13,const RT & a14,const RT & a15,const RT & a20,const RT & a21,const RT & a22,const RT & a23,const RT & a24,const RT & a25,const RT & a30,const RT & a31,const RT & a32,const RT & a33,const RT & a34,const RT & a35,const RT & a40,const RT & a41,const RT & a42,const RT & a43,const RT & a44,const RT & a45,const RT & a50,const RT & a51,const RT & a52,const RT & a53,const RT & a54,const RT & a55)83 sign_of_determinant(
84  const RT& a00, const RT& a01, const RT& a02, const RT& a03, const RT& a04,
85  const RT& a05,
86  const RT& a10, const RT& a11, const RT& a12, const RT& a13, const RT& a14,
87  const RT& a15,
88  const RT& a20, const RT& a21, const RT& a22, const RT& a23, const RT& a24,
89  const RT& a25,
90  const RT& a30, const RT& a31, const RT& a32, const RT& a33, const RT& a34,
91  const RT& a35,
92  const RT& a40, const RT& a41, const RT& a42, const RT& a43, const RT& a44,
93  const RT& a45,
94  const RT& a50, const RT& a51, const RT& a52, const RT& a53, const RT& a54,
95  const RT& a55)
96 {
97   return CGAL_NTS sign(determinant(a00, a01, a02, a03, a04, a05,
98                                          a10, a11, a12, a13, a14, a15,
99                                          a20, a21, a22, a23, a24, a25,
100                                          a30, a31, a32, a33, a34, a35,
101                                          a40, a41, a42, a43, a44, a45,
102                                          a50, a51, a52, a53, a54, a55));
103 }
104 
105 } //namespace CGAL
106 
107 #endif // CGAL_PREDICATES_SIGN_OF_DETERMINANT_H
108