Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/externals/clhep/src/DoubConv.cc

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 ]

Diff markup

Differences between /externals/clhep/src/DoubConv.cc (Version 11.3.0) and /externals/clhep/src/DoubConv.cc (Version 8.1.p1)


  1 // -*- C++ -*-                                      1 
  2 // -------------------------------------------    
  3 //                             HEP Random         
  4 //                          --- DoubConv ---      
  5 //                      class implementation f    
  6 // -------------------------------------------    
  7                                                   
  8 #include "CLHEP/Random/DoubConv.h"                
  9                                                   
 10 #include <sstream>                                
 11 #include <iomanip>                                
 12 #include <vector>                                 
 13                                                   
 14 namespace CLHEP {                                 
 15                                                   
 16 CLHEP_THREAD_LOCAL bool DoubConv::byte_order_k    
 17 CLHEP_THREAD_LOCAL int  DoubConv::byte_order[8    
 18                                                   
 19 void DoubConv::fill_byte_order () {               
 20   double x = 1.0;                                 
 21   int t30 = 1 << 30;                              
 22   int t22 = 1 << 22;                              
 23   x *= t30;                                       
 24   x *= t22;                                       
 25   double y = 1;                                   
 26   double z = 1;                                   
 27   x *= z;                                         
 28   for (int k=0; k<6; k++) {                       
 29     x += y*z;                                     
 30     y += 1;                                       
 31     z *= 256;                                     
 32   }                                               
 33   // x, in IEEE format, would now be 0x4330060    
 34   DB8 xb;                                         
 35   xb.d = x;                                       
 36   int n;                                          
 37   static const int UNSET = -1;                    
 38   for (n=0; n<8; n++) {                           
 39     byte_order[n] = UNSET;                        
 40   }                                               
 41   int order;                                      
 42   for (n=0; n<8; n++) {                           
 43     switch ( xb.b[n] ) {                          
 44       case 0x43:                                  
 45         order = 0;                                
 46         break;                                    
 47       case 0x30:                                  
 48         order = 1;                                
 49         break;                                    
 50       case 0x06:                                  
 51         order = 2;                                
 52         break;                                    
 53       case 0x05:                                  
 54         order = 3;                                
 55         break;                                    
 56       case 0x04:                                  
 57         order = 4;                                
 58         break;                                    
 59       case 0x03:                                  
 60         order = 5;                                
 61         break;                                    
 62       case 0x02:                                  
 63         order = 6;                                
 64         break;                                    
 65       case 0x01:                                  
 66         order = 7;                                
 67         break;                                    
 68       default:                                    
 69         throw DoubConvException(                  
 70     "Cannot determine byte-ordering of doubles    
 71     }                                             
 72     if (byte_order[n] != UNSET) {                 
 73         throw DoubConvException(                  
 74     "Confusion in byte-ordering of doubles on     
 75     }                                             
 76     byte_order[n] = order;                        
 77     byte_order_known = true;                      
 78   }                                               
 79   return;                                         
 80 }                                                 
 81                                                   
 82 std::string DoubConv::d2x(double d) {             
 83   if ( !byte_order_known ) fill_byte_order ();    
 84   DB8 db;                                         
 85   db.d = d;                                       
 86   std::ostringstream ss;                          
 87   for (int i=0; i<8; ++i) {                       
 88     int k = byte_order[i];                        
 89     ss << std::hex << std::setw(2) << std::set    
 90   }                                               
 91   return ss.str();                                
 92 }                                                 
 93                                                   
 94 std::vector<unsigned long> DoubConv::dto2longs    
 95   std::vector<unsigned long> v(2);                
 96   if ( !byte_order_known ) fill_byte_order ();    
 97   DB8 db;                                         
 98   db.d = d;                                       
 99   v[0] =   ((static_cast<unsigned long>(db.b[b    
100          | ((static_cast<unsigned long>(db.b[b    
101          | ((static_cast<unsigned long>(db.b[b    
102          | ((static_cast<unsigned long>(db.b[b    
103   v[1] =   ((static_cast<unsigned long>(db.b[b    
104          | ((static_cast<unsigned long>(db.b[b    
105          | ((static_cast<unsigned long>(db.b[b    
106          | ((static_cast<unsigned long>(db.b[b    
107   return v;                                       
108 }                                                 
109                                                   
110 double DoubConv::longs2double (const std::vect    
111   DB8 db;                                         
112   unsigned char bytes[8];                         
113   if ( !byte_order_known ) fill_byte_order ();    
114   bytes[0] = static_cast<unsigned char>((v[0]     
115   bytes[1] = static_cast<unsigned char>((v[0]     
116   bytes[2] = static_cast<unsigned char>((v[0]     
117   bytes[3] = static_cast<unsigned char>((v[0]     
118   bytes[4] = static_cast<unsigned char>((v[1]     
119   bytes[5] = static_cast<unsigned char>((v[1]     
120   bytes[6] = static_cast<unsigned char>((v[1]     
121   bytes[7] = static_cast<unsigned char>((v[1]     
122   for (int i=0; i<8; ++i) {                       
123     db.b[byte_order[i]] =  bytes[i];              
124   }                                               
125   return db.d;                                    
126 }                                                 
127                                                   
128 } // end namespace CLHEP                          
129