# Possible bug in conversions of Float16 NaN values to Float32/Float64

**URL:** https://discourse.julialang.org/t/possible-bug-in-conversions-of-float16-nan-values-to-float32-float64/5225
**Category:** Internals & Design
**Created:** [August 4, 2017, 3:51pm UTC](https://discourse.julialang.org/t/possible-bug-in-conversions-of-float16-nan-values-to-float32-float64/5225 "2017-08-04T15:51:32Z")
**Posts on this page:** 4
**Page:** 1

<div class="post-metadata">

### Author: ![ScottPJones](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/scottpjones/32/146_2.png) [@ScottPJones](https://discourse.julialang.org/u/ScottPJones)
#### Post date: [August 4, 2017, 3:51pm UTC](https://discourse.julialang.org/t/possible-bug-in-conversions-of-float16-nan-values-to-float32-float64/5225/1 "2017-08-04T15:51:32Z")

</div>

The code for convert(::Type{Float32}, val::Float16) in Base at float.jl:155 seems to be incorrect.

I had expected that conversions of NaN values from Float16 to larger types would preserve the NaN payload,  
so that a round-trip would give the exact same bit pattern, however, for 2046 of the possible NaN16 values,  
the 10 bits of payload get replaced by 0.

Conversions from Float32 to Float64 and back again will always give the same bit pattern, so I believe this is a bug.  
To fix this, line 185 needs: `ret = 0x7fc00000 | (sign<<31)` replaced by `ret = 0x7fc00000 | (sign<<31) | (sig<<(23-10))`

---

<div class="post-metadata">

### Author: ![StefanKarpinski](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stefankarpinski/32/24_2.png) [@StefanKarpinski](https://discourse.julialang.org/u/StefanKarpinski)
#### Post date: [August 14, 2017, 4:15am UTC](https://discourse.julialang.org/t/possible-bug-in-conversions-of-float16-nan-values-to-float32-float64/5225/2 "2017-08-14T04:15:09Z")

</div>

Issue opened: [https://github.com/JuliaLang/julia/issues/23244](https://github.com/JuliaLang/julia/issues/23244).

---

<div class="post-metadata">

### Author: ![ScottPJones](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/scottpjones/32/146_2.png) [@ScottPJones](https://discourse.julialang.org/u/ScottPJones)
#### Post date: [August 15, 2017, 5:52pm UTC](https://discourse.julialang.org/t/possible-bug-in-conversions-of-float16-nan-values-to-float32-float64/5225/3 "2017-08-15T17:52:59Z")

</div>

Thanks! Can this be placed on the backport list for v0.6.x?  
(it would be nice to not have to implement a work-around until v1.0 comes out 🙂 )

---

<div class="post-metadata">

### Author: ![StefanKarpinski](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stefankarpinski/32/24_2.png) [@StefanKarpinski](https://discourse.julialang.org/u/StefanKarpinski)
#### Post date: [August 16, 2017, 3:21am UTC](https://discourse.julialang.org/t/possible-bug-in-conversions-of-float16-nan-values-to-float32-float64/5225/4 "2017-08-16T03:21:56Z")

</div>

Done.
