コード例 #1
0
    def readFloat16(self):
        """
        Read 16-bits from the stream as a float value encoded according to IEEE 754 binary16.

        :returns: Read float value.
        :raises PythonRuntimeException: If the reading goes behind the stream.
        """

        return convertUInt16ToFloat(self.readBits(16))
コード例 #2
0
ファイル: test_float.py プロジェクト: vvvictorlee/zserio
    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))