Skip to content

Instantly share code, notes, and snippets.

@Ludophonic
Last active January 4, 2024 03:48
Show Gist options
  • Save Ludophonic/8642597 to your computer and use it in GitHub Desktop.
Save Ludophonic/8642597 to your computer and use it in GitHub Desktop.
Visual studio type visualizer for half precision (16 bit) floating point values.
union FP16
{
uint16 u;
struct
{
uint16 Mantissa : 10;
uint16 Exponent : 5;
uint16 Sign : 1;
};
};
struct half
{
// Constructors, operators, etc... here
FP16 fp16;
};
<?xml version="1.0" encoding="utf-8"?>
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
<Type Name="half">
<DisplayString Condition = "fp16.Exponent == 0">{(0.00006103515625f * fp16.Mantissa/1024.0f)}</DisplayString>
<DisplayString Condition = "fp16.Exponent == 31 &amp;&amp; fp16.Mantissa == 0">{fp16.Sign*-2+1}.#INFINITY</DisplayString>
<DisplayString Condition = "fp16.Exponent == 31">#NaN</DisplayString>
<DisplayString Condition = "fp16.Exponent &lt; 15">{1.0f / (1 &lt;&lt; (15 - fp16.Exponent)) * (fp16.Sign*-2+1.0f) * (1.0f + fp16.Mantissa/1024.0f)}</DisplayString>
<DisplayString Condition = "fp16.Exponent &gt; 15">{(1 &lt;&lt; (fp16.Exponent-15)) * (fp16.Sign*-2+1.0f) * (1.0f + fp16.Mantissa/1024.0f)}</DisplayString>
<DisplayString>{(fp16.Sign*-2+1) * 1.0f + fp16.Mantissa/1024.0f}</DisplayString>
</Type>
</AutoVisualizer>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment