src/simulator/high-precision.cc
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Tue, 02 Sep 2008 10:12:14 -0700
changeset 3576 f6abfdf47163
parent 1696 0de65f4c8c43
child 5770 bb1eea10412f
permissions -rw-r--r--
bug 303: return value should not be const
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
153
22c3d53dbae3 Add HighPrecision class used for external Time bookkeeping
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
22c3d53dbae3 Add HighPrecision class used for external Time bookkeeping
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     2
/*
22c3d53dbae3 Add HighPrecision class used for external Time bookkeeping
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     3
 * Copyright (c) 2006 INRIA
22c3d53dbae3 Add HighPrecision class used for external Time bookkeeping
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     4
 *
22c3d53dbae3 Add HighPrecision class used for external Time bookkeeping
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
22c3d53dbae3 Add HighPrecision class used for external Time bookkeeping
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
22c3d53dbae3 Add HighPrecision class used for external Time bookkeeping
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
22c3d53dbae3 Add HighPrecision class used for external Time bookkeeping
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     8
 *
22c3d53dbae3 Add HighPrecision class used for external Time bookkeeping
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
22c3d53dbae3 Add HighPrecision class used for external Time bookkeeping
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
22c3d53dbae3 Add HighPrecision class used for external Time bookkeeping
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22c3d53dbae3 Add HighPrecision class used for external Time bookkeeping
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    12
 * GNU General Public License for more details.
22c3d53dbae3 Add HighPrecision class used for external Time bookkeeping
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    13
 *
22c3d53dbae3 Add HighPrecision class used for external Time bookkeeping
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
22c3d53dbae3 Add HighPrecision class used for external Time bookkeeping
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
22c3d53dbae3 Add HighPrecision class used for external Time bookkeeping
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
22c3d53dbae3 Add HighPrecision class used for external Time bookkeeping
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    17
 *
22c3d53dbae3 Add HighPrecision class used for external Time bookkeeping
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    18
 * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
22c3d53dbae3 Add HighPrecision class used for external Time bookkeeping
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    19
 */
22c3d53dbae3 Add HighPrecision class used for external Time bookkeeping
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    20
#include "high-precision.h"
22c3d53dbae3 Add HighPrecision class used for external Time bookkeeping
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    21
154
9ef3700452c7 add ns3 namespace to HighPrecision class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 153
diff changeset
    22
#include <cmath>
286
57e6a2006962 convert use of <cassert> to "ns3/assert.h"
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 170
diff changeset
    23
#include "ns3/assert.h"
154
9ef3700452c7 add ns3 namespace to HighPrecision class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 153
diff changeset
    24
9ef3700452c7 add ns3 namespace to HighPrecision class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 153
diff changeset
    25
9ef3700452c7 add ns3 namespace to HighPrecision class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 153
diff changeset
    26
namespace ns3 {
9ef3700452c7 add ns3 namespace to HighPrecision class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 153
diff changeset
    27
155
cf4d45ad2da9 add Abs/Max/Min non-member functions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 154
diff changeset
    28
HighPrecision Abs (HighPrecision const &value)
cf4d45ad2da9 add Abs/Max/Min non-member functions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 154
diff changeset
    29
{
cf4d45ad2da9 add Abs/Max/Min non-member functions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 154
diff changeset
    30
  if (value.Compare (HighPrecision::Zero ()) <= 0)
cf4d45ad2da9 add Abs/Max/Min non-member functions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 154
diff changeset
    31
    {
170
9f68cb694f40 implement 128 bit arithmetic with cairo's internal types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 168
diff changeset
    32
      HighPrecision v = HighPrecision::Zero ();
9f68cb694f40 implement 128 bit arithmetic with cairo's internal types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 168
diff changeset
    33
      v.Sub (value);
9f68cb694f40 implement 128 bit arithmetic with cairo's internal types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 168
diff changeset
    34
      return v;
155
cf4d45ad2da9 add Abs/Max/Min non-member functions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 154
diff changeset
    35
    }
cf4d45ad2da9 add Abs/Max/Min non-member functions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 154
diff changeset
    36
  else
cf4d45ad2da9 add Abs/Max/Min non-member functions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 154
diff changeset
    37
    {
cf4d45ad2da9 add Abs/Max/Min non-member functions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 154
diff changeset
    38
      return value;
cf4d45ad2da9 add Abs/Max/Min non-member functions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 154
diff changeset
    39
    }
cf4d45ad2da9 add Abs/Max/Min non-member functions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 154
diff changeset
    40
}
cf4d45ad2da9 add Abs/Max/Min non-member functions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 154
diff changeset
    41
HighPrecision Max (HighPrecision const &a, HighPrecision const &b)
cf4d45ad2da9 add Abs/Max/Min non-member functions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 154
diff changeset
    42
{
cf4d45ad2da9 add Abs/Max/Min non-member functions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 154
diff changeset
    43
  if (a.Compare (b) >= 0)
cf4d45ad2da9 add Abs/Max/Min non-member functions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 154
diff changeset
    44
    {
cf4d45ad2da9 add Abs/Max/Min non-member functions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 154
diff changeset
    45
      return a;
cf4d45ad2da9 add Abs/Max/Min non-member functions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 154
diff changeset
    46
    }
cf4d45ad2da9 add Abs/Max/Min non-member functions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 154
diff changeset
    47
  else
cf4d45ad2da9 add Abs/Max/Min non-member functions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 154
diff changeset
    48
    {
cf4d45ad2da9 add Abs/Max/Min non-member functions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 154
diff changeset
    49
      return b;
cf4d45ad2da9 add Abs/Max/Min non-member functions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 154
diff changeset
    50
    }
cf4d45ad2da9 add Abs/Max/Min non-member functions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 154
diff changeset
    51
}
cf4d45ad2da9 add Abs/Max/Min non-member functions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 154
diff changeset
    52
HighPrecision Min (HighPrecision const &a, HighPrecision const &b)
cf4d45ad2da9 add Abs/Max/Min non-member functions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 154
diff changeset
    53
{
cf4d45ad2da9 add Abs/Max/Min non-member functions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 154
diff changeset
    54
  if (a.Compare (b) <= 0)
cf4d45ad2da9 add Abs/Max/Min non-member functions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 154
diff changeset
    55
    {
cf4d45ad2da9 add Abs/Max/Min non-member functions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 154
diff changeset
    56
      return a;
cf4d45ad2da9 add Abs/Max/Min non-member functions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 154
diff changeset
    57
    }
cf4d45ad2da9 add Abs/Max/Min non-member functions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 154
diff changeset
    58
  else
cf4d45ad2da9 add Abs/Max/Min non-member functions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 154
diff changeset
    59
    {
cf4d45ad2da9 add Abs/Max/Min non-member functions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 154
diff changeset
    60
      return b;
cf4d45ad2da9 add Abs/Max/Min non-member functions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 154
diff changeset
    61
    }
cf4d45ad2da9 add Abs/Max/Min non-member functions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 154
diff changeset
    62
}
cf4d45ad2da9 add Abs/Max/Min non-member functions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 154
diff changeset
    63
154
9ef3700452c7 add ns3 namespace to HighPrecision class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 153
diff changeset
    64
}; /* namespace ns3 */