<p dir="auto">Try this:</p>
<p dir="auto"><code class="notranslate">x = Float16[2.3 4.3; 3.4 5.6]</code><br>
<code class="notranslate">svd(x)</code></p>
<p dir="auto">The returned eigenvectors and eigenvalues are in <code class="notranslate">Float32</code>. I think they should be in <code class="notranslate">Float16</code>.</p>
<p dir="auto">Compare to the behavior of <code class="notranslate">svd(x)</code> where <code class="notranslate">x</code> is <code class="notranslate">Float32</code>, or <code class="notranslate">Float64</code>. In these cases the result has the same type of <code class="notranslate">x</code>.</p>
<p dir="auto">At this point, Float16 is in a kind of weird limbo where it is sort of a storage type but we keep haphazardly adding more and more functionality to it. I think we really need to figure out where to draw the line here. Either we severely limit the scope of Float16's functionality and stop using it in tests for anything but converting to and from other numeric types, or we just go full throttle and make it a full computation type with as much functionality as Float32 or Float64 – albeit slower, since many operations will not be implemented as native machine ops.</p>