Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/externals/clhep/include/CLHEP/Random/DoubConv.h

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

  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
 73