Skip to content

Float64 optimization #193

@brainswa

Description

@brainswa
func (z *Int) Float64() float64 {
  var bitlen uint64
  switch {
  case z[3] != 0:
    bitlen = uint64(bits.Len64(z[3])) - 1
    return math.Float64frombits((1023+192+bitlen)<<52 | ((z[3]<<(64-bitlen))|(z[2]>>bitlen))>>12)
  case z[2] != 0:
    bitlen = uint64(bits.Len64(z[2])) - 1
    return math.Float64frombits((1023+128+bitlen)<<52 | ((z[2]<<(64-bitlen))|(z[1]>>bitlen))>>12)
  case z[1] != 0:
    bitlen = uint64(bits.Len64(z[1])) - 1
    return math.Float64frombits((1023+64+bitlen)<<52 | ((z[1]<<(64-bitlen))|(z[0]>>bitlen))>>12)
  default:
    return float64(z[0])
  }
}
BenchmarkFloat64
BenchmarkFloat64-8       	337167862	         3.267 ns/op
BenchmarkFloat64Fast
BenchmarkFloat64Fast-8   	737007931	         1.708 ns/op

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions