def writeFloat64(self, value): """ Writes a 64-bit float value to the underlying storage according to IEEE 754 binary64. :param value: Float value to write. """ self.writeBits(convertFloatToUInt64(value), 64)
def testConvertUInt16ToFloat(self): # plus zero float16ValuePlusZero = self._createFloat16Value(0, 0, 0) # +0.0 self.assertEqual(0.0, convertUInt16ToFloat(float16ValuePlusZero)) # minus zero float16ValueMinusZero = self._createFloat16Value(1, 0, 0) # -0.0 self.assertEqual(-0.0, convertUInt16ToFloat(float16ValueMinusZero)) # plus infinity float16ValuePlusInfinity = self._createFloat16Value(0, 0x1F, 0) # +INF float64ValuePlusInfinity = self._createFloat64Value(0, 0x7FF, 0) # +INF convertedFloat = convertUInt16ToFloat(float16ValuePlusInfinity) self.assertEqual(float64ValuePlusInfinity, convertFloatToUInt64(convertedFloat)) # minus infinity float16ValueMinusInfinity = self._createFloat16Value(1, 0x1F, 0) # -INF float64ValueMinusInfinity = self._createFloat64Value(1, 0x7FF, 0) # -INF convertedFloat = convertUInt16ToFloat(float16ValueMinusInfinity) self.assertEqual(float64ValueMinusInfinity, convertFloatToUInt64(convertedFloat)) # quiet NaN float16ValueQuietNan = self._createFloat16Value(0, 0x1F, 0x3FF) # +NaN float64ValueQuietNan = self._createFloat64Value( 0, 0x7FF, 0xFFC0000000000) # +NaN convertedFloat = convertUInt16ToFloat(float16ValueQuietNan) self.assertEqual(float64ValueQuietNan, convertFloatToUInt64(convertedFloat)) # signaling NaN float16ValueSignalingNan = self._createFloat16Value(1, 0x1F, 0x3FF) # -NaN float64ValueSignalingNan = self._createFloat64Value( 1, 0x7FF, 0xFFC0000000000) # -NaN convertedFloat = convertUInt16ToFloat(float16ValueSignalingNan) self.assertEqual(float64ValueSignalingNan, convertFloatToUInt64(convertedFloat)) # normal numbers float16ValueOne = self._createFloat16Value(0, 15, 0) # 1.0 self.assertEqual(1.0, convertUInt16ToFloat(float16ValueOne)) float16ValueOnePlus = self._createFloat16Value(0, 15, 0x01) # 1.0 + 2^-10 float64ValueOnePlus = self._createFloat64Value( 0, 0x3FF, 0x40000000000) # 1.0 + 2^-10 convertedFloat = convertUInt16ToFloat(float16ValueOnePlus) self.assertEqual(float64ValueOnePlus, convertFloatToUInt64(convertedFloat)) float16ValueMax = self._createFloat16Value( 0, 30, 0x3FF) # 2^15 (1 + 2^-1 + ... + 2^-10) self.assertEqual(65504.0, convertUInt16ToFloat(float16ValueMax)) # subnormal numbers float16ValueMinSubnormal = self._createFloat16Value(0, 0, 1) # 2^-14 (2^-10) float64ValueMinSubnormal = self._createFloat64Value(0, 999, 0) # 2^-24 convertedFloat = convertUInt16ToFloat(float16ValueMinSubnormal) self.assertEqual(float64ValueMinSubnormal, convertFloatToUInt64(convertedFloat)) float16ValueMaxSubnormal = self._createFloat16Value( 0, 0, 0x3FF) # 2^-14 (2^-1 + ... + 2^-10) float64ValueMaxSubnormal = self._createFloat64Value( 0, 1008, 0xFF80000000000) # 2^-15 (1 + 2^-1 + ... + 2^-9) convertedFloat = convertUInt16ToFloat(float16ValueMaxSubnormal) self.assertEqual(float64ValueMaxSubnormal, convertFloatToUInt64(convertedFloat))
def testConvertFloatToUInt64(self): for dataRow in self.TEST_FLOAT64_DATA: convertedFloat64Value = convertFloatToUInt64(dataRow[3]) float64Value = self._createFloat64Value(dataRow[0], dataRow[1], dataRow[2]) self.assertEqual(float64Value, convertedFloat64Value)