109 uint32_t sign = (narrow >> NarrowType::SignBitPos) & 1;
110 uint32_t narrow_exponent = (narrow >> NarrowType::ExponentPos) &
111 ((1 << NarrowType::ExponentWidth) - 1);
112 uint32_t narrow_fraction = narrow & ((1 << NarrowType::FractionWidth) - 1);
116 static_cast<int32_t>(narrow_exponent) - NarrowType::Bias + WideType::Bias;
118 narrow_fraction << (WideType::FractionWidth - NarrowType::FractionWidth);
120 if (narrow_exponent == ((1 << NarrowType::ExponentWidth) - 1)) {
122 wide_exponent = ((1 << WideType::ExponentWidth) - 1);
124 }
else if (narrow_exponent == 0) {
125 if (narrow_fraction == 0) {
135 wide_exponent = 1 - NarrowType::Bias + WideType::Bias;
136 while (!(wide_fraction & (1 << WideType::FractionWidth))) {
140 wide_fraction &= ((1 << WideType::FractionWidth) - 1);
143 return (sign << WideType::SignBitPos) |
144 (wide_exponent << WideType::ExponentPos) | wide_fraction;