浏览代码

codec: fix implementation of half float to use uint32.

Ugorji Nwoke 11 年之前
父节点
当前提交
8c25fe5190
共有 2 个文件被更改,包括 4 次插入4 次删除
  1. 1 1
      codec/cbor.go
  2. 3 3
      codec/helper_internal.go

+ 1 - 1
codec/cbor.go

@@ -303,7 +303,7 @@ func (d *cborDecDriver) decodeUint(bitsize uint8) (ui uint64) {
 func (d *cborDecDriver) decodeFloat(chkOverflow32 bool) (f float64) {
 	switch d.bd {
 	case cborBdFloat16:
-		f = math.Float64frombits(halfFloatToDoubleBits(d.r.readUint16()))
+		f = float64(math.Float32frombits(halfFloatToFloatBits(d.r.readUint16())))
 	case cborBdFloat32:
 		f = float64(math.Float32frombits(d.r.readUint32()))
 	case cborBdFloat64:

+ 3 - 3
codec/helper_internal.go

@@ -129,8 +129,8 @@ func implementsIntf(typ, iTyp reflect.Type) (success bool, indir int8) {
 // validate that this function is correct ...
 // culled from OGRE (Object-Oriented Graphics Rendering Engine)
 // function: halfToFloatI (http://stderr.org/doc/ogre-doc/api/OgreBitwise_8h-source.html)
-func halfFloatToDoubleBits(yy uint16) (d uint64) {
-	y := uint64(yy)
+func halfFloatToFloatBits(yy uint16) (d uint32) {
+	y := uint32(yy)
 	s := (y >> 15) & 0x01
 	e := (y >> 10) & 0x1f
 	m := y & 0x03ff
@@ -144,7 +144,7 @@ func halfFloatToDoubleBits(yy uint16) (d uint64) {
 				e -= 1
 			}
 			e += 1
-			const zz uint64 = 0x0400
+			const zz uint32 = 0x0400
 			m &= ^zz
 		}
 	} else if e == 31 {