author | Mathieu Lacage <mathieu.lacage@sophia.inria.fr> |
Thu, 08 Jul 2010 09:38:09 +0200 | |
changeset 6503 | 3b5a61aafff5 |
parent 6501 | 5925f2959e16 |
child 6516 | 861add2d9893 |
permissions | -rw-r--r-- |
6405
7081046d04b0
forgot to add implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1 |
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ |
7081046d04b0
forgot to add implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
2 |
/* |
7081046d04b0
forgot to add implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
3 |
* Copyright (c) 2010 INRIA |
7081046d04b0
forgot to add implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
4 |
* |
7081046d04b0
forgot to add implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
5 |
* This program is free software; you can redistribute it and/or modify |
7081046d04b0
forgot to add implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
6 |
* it under the terms of the GNU General Public License version 2 as |
7081046d04b0
forgot to add implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
7 |
* published by the Free Software Foundation; |
7081046d04b0
forgot to add implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
8 |
* |
7081046d04b0
forgot to add implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
9 |
* This program is distributed in the hope that it will be useful, |
7081046d04b0
forgot to add implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
10 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
7081046d04b0
forgot to add implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
11 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
7081046d04b0
forgot to add implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
12 |
* GNU General Public License for more details. |
7081046d04b0
forgot to add implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
13 |
* |
7081046d04b0
forgot to add implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
14 |
* You should have received a copy of the GNU General Public License |
7081046d04b0
forgot to add implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
15 |
* along with this program; if not, write to the Free Software |
7081046d04b0
forgot to add implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
16 |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
7081046d04b0
forgot to add implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
17 |
* |
7081046d04b0
forgot to add implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
18 |
* Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr> |
7081046d04b0
forgot to add implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
19 |
*/ |
7081046d04b0
forgot to add implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
20 |
#ifndef HIGH_PRECISION_128_H |
7081046d04b0
forgot to add implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
21 |
#define HIGH_PRECISION_128_H |
7081046d04b0
forgot to add implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
22 |
|
7081046d04b0
forgot to add implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
23 |
#include "ns3/simulator-config.h" |
6420
bd1d57413c90
forgot to declare method as inline
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6419
diff
changeset
|
24 |
#include <math.h> |
6405
7081046d04b0
forgot to add implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
25 |
#include <stdint.h> |
7081046d04b0
forgot to add implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
26 |
|
7081046d04b0
forgot to add implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
27 |
#if defined(HAVE___UINT128_T) and !defined(HAVE_UINT128_T) |
7081046d04b0
forgot to add implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
28 |
typedef __uint128_t uint128_t; |
7081046d04b0
forgot to add implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
29 |
typedef __int128_t int128_t; |
7081046d04b0
forgot to add implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
30 |
#endif |
7081046d04b0
forgot to add implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
31 |
|
7081046d04b0
forgot to add implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
32 |
namespace ns3 { |
7081046d04b0
forgot to add implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
33 |
|
7081046d04b0
forgot to add implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
34 |
class HighPrecision |
7081046d04b0
forgot to add implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
35 |
{ |
7081046d04b0
forgot to add implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
36 |
public: |
6407
61ef5452e798
inline new high precision implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6405
diff
changeset
|
37 |
inline HighPrecision (); |
6503
3b5a61aafff5
add missing explicit keyword to match -cairo version of the code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6501
diff
changeset
|
38 |
explicit inline HighPrecision (int64_t value, bool dummy); |
3b5a61aafff5
add missing explicit keyword to match -cairo version of the code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6501
diff
changeset
|
39 |
explicit inline HighPrecision (double value); |
6405
7081046d04b0
forgot to add implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
40 |
|
6407
61ef5452e798
inline new high precision implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6405
diff
changeset
|
41 |
inline int64_t GetInteger (void) const; |
61ef5452e798
inline new high precision implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6405
diff
changeset
|
42 |
inline double GetDouble (void) const; |
6413
13571b6a50ba
no need to bother with ignored return value
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6407
diff
changeset
|
43 |
inline void Add (HighPrecision const &o); |
13571b6a50ba
no need to bother with ignored return value
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6407
diff
changeset
|
44 |
inline void Sub (HighPrecision const &o); |
13571b6a50ba
no need to bother with ignored return value
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6407
diff
changeset
|
45 |
void Mul (HighPrecision const &o); |
13571b6a50ba
no need to bother with ignored return value
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6407
diff
changeset
|
46 |
void Div (HighPrecision const &o); |
6501
5925f2959e16
tests pass on 64bit systems
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6421
diff
changeset
|
47 |
void MulByInvert (const HighPrecision &o); |
5925f2959e16
tests pass on 64bit systems
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6421
diff
changeset
|
48 |
static HighPrecision Invert (uint64_t v); |
6405
7081046d04b0
forgot to add implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
49 |
|
6407
61ef5452e798
inline new high precision implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6405
diff
changeset
|
50 |
inline int Compare (HighPrecision const &o) const; |
61ef5452e798
inline new high precision implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6405
diff
changeset
|
51 |
inline static HighPrecision Zero (void); |
6405
7081046d04b0
forgot to add implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
52 |
private: |
6501
5925f2959e16
tests pass on 64bit systems
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6421
diff
changeset
|
53 |
static uint128_t UmulByInvert (uint128_t a, uint128_t b); |
5925f2959e16
tests pass on 64bit systems
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6421
diff
changeset
|
54 |
static uint128_t Umul (uint128_t a, uint128_t b); |
5925f2959e16
tests pass on 64bit systems
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6421
diff
changeset
|
55 |
static uint128_t Divu (uint128_t a, uint128_t b); |
5925f2959e16
tests pass on 64bit systems
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6421
diff
changeset
|
56 |
|
6405
7081046d04b0
forgot to add implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
57 |
int128_t m_value; |
7081046d04b0
forgot to add implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
58 |
}; |
7081046d04b0
forgot to add implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
59 |
|
7081046d04b0
forgot to add implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
60 |
} // namespace ns3 |
7081046d04b0
forgot to add implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
61 |
|
6407
61ef5452e798
inline new high precision implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6405
diff
changeset
|
62 |
namespace ns3 { |
61ef5452e798
inline new high precision implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6405
diff
changeset
|
63 |
|
61ef5452e798
inline new high precision implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6405
diff
changeset
|
64 |
HighPrecision::HighPrecision () |
61ef5452e798
inline new high precision implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6405
diff
changeset
|
65 |
: m_value (0) |
61ef5452e798
inline new high precision implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6405
diff
changeset
|
66 |
{} |
61ef5452e798
inline new high precision implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6405
diff
changeset
|
67 |
HighPrecision::HighPrecision (int64_t value, bool dummy) |
61ef5452e798
inline new high precision implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6405
diff
changeset
|
68 |
: m_value (value) |
61ef5452e798
inline new high precision implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6405
diff
changeset
|
69 |
{ |
61ef5452e798
inline new high precision implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6405
diff
changeset
|
70 |
m_value <<= 64; |
61ef5452e798
inline new high precision implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6405
diff
changeset
|
71 |
} |
61ef5452e798
inline new high precision implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6405
diff
changeset
|
72 |
|
61ef5452e798
inline new high precision implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6405
diff
changeset
|
73 |
|
61ef5452e798
inline new high precision implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6405
diff
changeset
|
74 |
|
61ef5452e798
inline new high precision implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6405
diff
changeset
|
75 |
int64_t HighPrecision::GetInteger (void) const |
61ef5452e798
inline new high precision implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6405
diff
changeset
|
76 |
{ |
61ef5452e798
inline new high precision implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6405
diff
changeset
|
77 |
int128_t v = m_value >> 64; |
61ef5452e798
inline new high precision implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6405
diff
changeset
|
78 |
return v; |
61ef5452e798
inline new high precision implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6405
diff
changeset
|
79 |
} |
61ef5452e798
inline new high precision implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6405
diff
changeset
|
80 |
|
6413
13571b6a50ba
no need to bother with ignored return value
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6407
diff
changeset
|
81 |
void |
6407
61ef5452e798
inline new high precision implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6405
diff
changeset
|
82 |
HighPrecision::Add (HighPrecision const &o) |
61ef5452e798
inline new high precision implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6405
diff
changeset
|
83 |
{ |
61ef5452e798
inline new high precision implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6405
diff
changeset
|
84 |
m_value += o.m_value; |
61ef5452e798
inline new high precision implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6405
diff
changeset
|
85 |
} |
6413
13571b6a50ba
no need to bother with ignored return value
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6407
diff
changeset
|
86 |
void |
6407
61ef5452e798
inline new high precision implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6405
diff
changeset
|
87 |
HighPrecision::Sub (HighPrecision const &o) |
61ef5452e798
inline new high precision implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6405
diff
changeset
|
88 |
{ |
61ef5452e798
inline new high precision implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6405
diff
changeset
|
89 |
m_value -= o.m_value; |
61ef5452e798
inline new high precision implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6405
diff
changeset
|
90 |
} |
61ef5452e798
inline new high precision implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6405
diff
changeset
|
91 |
|
61ef5452e798
inline new high precision implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6405
diff
changeset
|
92 |
int |
61ef5452e798
inline new high precision implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6405
diff
changeset
|
93 |
HighPrecision::Compare (HighPrecision const &o) const |
61ef5452e798
inline new high precision implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6405
diff
changeset
|
94 |
{ |
61ef5452e798
inline new high precision implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6405
diff
changeset
|
95 |
return (m_value < o.m_value)?-1:(m_value == o.m_value)?0:1; |
61ef5452e798
inline new high precision implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6405
diff
changeset
|
96 |
} |
61ef5452e798
inline new high precision implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6405
diff
changeset
|
97 |
|
61ef5452e798
inline new high precision implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6405
diff
changeset
|
98 |
HighPrecision |
61ef5452e798
inline new high precision implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6405
diff
changeset
|
99 |
HighPrecision::Zero (void) |
61ef5452e798
inline new high precision implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6405
diff
changeset
|
100 |
{ |
61ef5452e798
inline new high precision implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6405
diff
changeset
|
101 |
return HighPrecision (); |
61ef5452e798
inline new high precision implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6405
diff
changeset
|
102 |
} |
61ef5452e798
inline new high precision implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6405
diff
changeset
|
103 |
|
6419
c08597bde2a0
inline a few more functions for optimization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6413
diff
changeset
|
104 |
#define HP128_MAX_64 18446744073709551615.0 |
c08597bde2a0
inline a few more functions for optimization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6413
diff
changeset
|
105 |
double |
c08597bde2a0
inline a few more functions for optimization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6413
diff
changeset
|
106 |
HighPrecision::GetDouble (void) const |
c08597bde2a0
inline a few more functions for optimization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6413
diff
changeset
|
107 |
{ |
c08597bde2a0
inline a few more functions for optimization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6413
diff
changeset
|
108 |
bool is_negative = m_value < 0; |
c08597bde2a0
inline a few more functions for optimization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6413
diff
changeset
|
109 |
uint128_t value = is_negative ? -m_value:m_value; |
c08597bde2a0
inline a few more functions for optimization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6413
diff
changeset
|
110 |
uint64_t hi = value >> 64; |
c08597bde2a0
inline a few more functions for optimization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6413
diff
changeset
|
111 |
uint64_t lo = value; |
c08597bde2a0
inline a few more functions for optimization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6413
diff
changeset
|
112 |
double flo = lo; |
c08597bde2a0
inline a few more functions for optimization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6413
diff
changeset
|
113 |
flo /= HP128_MAX_64; |
c08597bde2a0
inline a few more functions for optimization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6413
diff
changeset
|
114 |
double retval = hi; |
c08597bde2a0
inline a few more functions for optimization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6413
diff
changeset
|
115 |
retval += flo; |
c08597bde2a0
inline a few more functions for optimization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6413
diff
changeset
|
116 |
retval = is_negative ? -retval : retval; |
c08597bde2a0
inline a few more functions for optimization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6413
diff
changeset
|
117 |
return retval; |
c08597bde2a0
inline a few more functions for optimization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6413
diff
changeset
|
118 |
} |
c08597bde2a0
inline a few more functions for optimization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6413
diff
changeset
|
119 |
HighPrecision::HighPrecision (double value) |
c08597bde2a0
inline a few more functions for optimization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6413
diff
changeset
|
120 |
{ |
c08597bde2a0
inline a few more functions for optimization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6413
diff
changeset
|
121 |
bool is_negative = value < 0; |
c08597bde2a0
inline a few more functions for optimization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6413
diff
changeset
|
122 |
value = is_negative?-value:value; |
c08597bde2a0
inline a few more functions for optimization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6413
diff
changeset
|
123 |
double hi = floor (value); |
c08597bde2a0
inline a few more functions for optimization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6413
diff
changeset
|
124 |
double lo = (value - hi) * HP128_MAX_64; |
6421
7eff392b2cfe
avoid compiler error
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6420
diff
changeset
|
125 |
m_value = (int128_t)hi; |
6419
c08597bde2a0
inline a few more functions for optimization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6413
diff
changeset
|
126 |
m_value <<= 64; |
6421
7eff392b2cfe
avoid compiler error
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6420
diff
changeset
|
127 |
m_value += (int128_t)lo; |
6419
c08597bde2a0
inline a few more functions for optimization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6413
diff
changeset
|
128 |
m_value = is_negative?-m_value:m_value; |
c08597bde2a0
inline a few more functions for optimization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6413
diff
changeset
|
129 |
} |
c08597bde2a0
inline a few more functions for optimization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6413
diff
changeset
|
130 |
#undef HP128_MAX_64 |
c08597bde2a0
inline a few more functions for optimization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6413
diff
changeset
|
131 |
|
6407
61ef5452e798
inline new high precision implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6405
diff
changeset
|
132 |
} // namespace ns3 |
61ef5452e798
inline new high precision implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6405
diff
changeset
|
133 |
|
6405
7081046d04b0
forgot to add implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
134 |
#endif /* HIGH_PRECISION_128_H */ |