ECCE @ EIC Software
Reference for
ECCE @ EIC
simulation and reconstruction software on GitHub
Home page
Related Pages
Modules
Namespaces
Classes
Files
External Links
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
DoubConv.h
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file DoubConv.h
1
// -*- C++ -*-
2
//
3
// -----------------------------------------------------------------------
4
// Hep Random
5
// --- DoubConv ---
6
// class header file
7
// -----------------------------------------------------------------------
8
//
9
#ifndef DOUBCONV_HH
10
#define DOUBCONV_HH
11
12
#include <string>
13
#include <vector>
14
#include <exception>
15
#include "
CLHEP/Utility/thread_local.h
"
16
17
namespace
CLHEP {
18
19
class
DoubConvException
:
public
std::exception {
20
public
:
21
DoubConvException
(
const
std::string &
w
)
throw
() :
msg
(
w
) {}
22
~DoubConvException
() throw() {}
23
const
char
*
what
()
const
throw() {
return
msg
.c_str(); }
24
private
:
25
std::string
msg
;
26
};
27
28
class
DoubConv
{
29
public
:
30
31
// dto2longs(d) returns (in a vector) two unsigned longs string containing the
32
// representation of its double input. This is byte-ordering
33
// independant, and depends for complete portability ONLY on adherance
34
// to the IEEE 754 standard for 64-bit floating point representation.
35
// The first unsigned long contains the high-order bits in IEEE; thus
36
// 1.0 will always be 0x3FF00000, 00000000
37
static
std::vector<unsigned long>
dto2longs
(
double
d
);
38
39
// longs2double (v) returns a double containing the value represented by its
40
// input, which must be a vector containing 2 unsigned longs.
41
// The input is taken to be the representation according to
42
// the IEEE 754 standard for a 64-bit floating point number, whose value
43
// is returned as a double. The byte-ordering of the double result is,
44
// of course, tailored to the proper byte-ordering for the system.
45
static
double
longs2double
(
const
std::vector<unsigned long> &
v
);
46
47
// dtox(d) returns a 16-character string containing the (zero-filled) hex
48
// representation of its double input. This is byte-ordering
49
// independant, and depends for complete portability ONLY on adherance
50
// to the IEEE 754 standard for 64-bit floating point representation.
51
static
std::string
d2x
(
double
d);
52
53
private
:
54
union
DB8
{
55
unsigned
char
b
[8];
56
double
d
;
57
};
58
static
void
fill_byte_order
();
59
static
CLHEP_THREAD_LOCAL
bool
byte_order_known
;
60
static
CLHEP_THREAD_LOCAL
int
byte_order
[8];
61
// Meaning of byte_order: The first (high-order in IEEE 754) byte to
62
// output (or the high-order byte of the first unsigned long)
63
// is of db.b[byte_order[0]]. Thus the index INTO byte_order
64
// is a position in the IEEE representation of the double, and the value
65
// of byte_order[k] is an offset in the memory representation of the
66
// double.
67
};
68
69
70
}
71
72
#endif // DOUBCONV_HH
geant4
tree
geant4-10.6-release
source
externals
clhep
include
CLHEP
Random
DoubConv.h
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:14
using
1.8.2 with
ECCE GitHub integration