- template<int center> struct exponentToMultiplier< -1, center> { enum { X = 0 }; };
- template<int center> struct exponentToMultiplier< -256, center> { enum { X = 0 }; };
- template<int center> struct exponentToMultiplier< -512, center> { enum { X = 0 }; };
- template<int center> struct exponentToMultiplier<-1024, center> { enum { X = 0 }; };
-
- template<int e> struct exponentToDivisor { enum {
- X = exponentToDivisor<e + 1>::X * 2,
- Value = (X == 0 ? 1 : X)
+ template<int center> struct exponentToMultiplier< -1, center> { enum { X = 0, Value = 1 }; };
+ template<int center> struct exponentToMultiplier< -128, center> { enum { X = 0, Value = 1 }; };
+ template<int center> struct exponentToMultiplier< -256, center> { enum { X = 0, Value = 1 }; };
+ template<int center> struct exponentToMultiplier< -384, center> { enum { X = 0, Value = 1 }; };
+ template<int center> struct exponentToMultiplier< -512, center> { enum { X = 0, Value = 1 }; };
+ template<int center> struct exponentToMultiplier< -640, center> { enum { X = 0, Value = 1 }; };
+ template<int center> struct exponentToMultiplier< -768, center> { enum { X = 0, Value = 1 }; };
+ template<int center> struct exponentToMultiplier< -896, center> { enum { X = 0, Value = 1 }; };
+ template<int center> struct exponentToMultiplier<-1024, center> { enum { X = 0, Value = 1 }; };
+
+ template<int e, int center> struct exponentToDivisor { enum {
+ X = exponentToDivisor<e + 1, center>::X * ((center - e < 31) ? 2 : 1),
+ Value = (X == 0 ? 1 : X)