1 /* 2 * Copyright 2012 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #if 0 9 // snippets that one day may be useful, unused for now... 10 11 // get sign, exponent, mantissa from double 12 // Translate the double into sign, exponent and mantissa. 13 long bits = BitConverter.DoubleToInt64Bits(d); 14 // Note that the shift is sign-extended, hence the test against -1 not 1 15 bool negative = (bits < 0); 16 int exponent = (int) ((bits >> 52) & 0x7ffL); 17 long mantissa = bits & 0xfffffffffffffL; 18 19 // Subnormal numbers; exponent is effectively one higher, 20 // but there's no extra normalisation bit in the mantissa 21 if (exponent==0) 22 { 23 exponent++; 24 } 25 // Normal numbers; leave exponent as it is but add extra 26 // bit to the front of the mantissa 27 else 28 { 29 mantissa = mantissa | (1L<<52); 30 } 31 32 // Bias the exponent. It's actually biased by 1023, but we're 33 // treating the mantissa as m.0 rather than 0.m, so we need 34 // to subtract another 52 from it. 35 exponent -= 1075; 36 37 if (mantissa == 0) 38 { 39 return "0"; 40 } 41 42 /* Normalize */ 43 while((mantissa & 1) == 0) 44 { /* i.e., Mantissa is even */ 45 mantissa >>= 1; 46 exponent++; 47 } 48 #endif 49