微軟在.NET 5的第7預覽版中加入了一個稱為Half的類型,相當於半精度浮點數binary16,也就是使用16位元儲存浮點數值。IEEE 754規範定義了各種浮點數類型,包括binary16、binary32、binary64和binary128,微軟提到,C#中相當於binary32的Float,以及binary64的Double,這兩個是大部分開發人員熟悉的類型,這些標準格式可以讓開發者在應用程式中,選擇適當的類型表達一定範圍的精度數值。

而在最新版本的.NET 5中,官方增加了一個全新的Half類型,是占16位元的二進位浮點數,由於Half只有Float一半的位元,因此Half可以表示的數值範圍則在正負65504之間,Half被定義為以2為基數的16位元交換格式,目的是要支援浮點資料的交換,微軟提到,Half類型的主要使用案例,像是儲存不需要全精度的計算結果等,而目前已經有許多工作負載使用到Half類型,諸如機器學習、繪圖卡、新的處理器和原生SIMD函式庫等。

由於Half只有16位元,因此任何的半精度浮點數值,都可以表示為浮點數或是雙精度浮點數,而不會損失精準度,但是反向操作,從浮點數或是雙精度浮點數轉為半精度浮點數時,則會失去部分精準度。微軟表示,在.NET 5.0中,Half類型為一個沒有算數運算子定義的交換類型,其只支援解析、格式化和比較運算子,但因為所有算術運算都需要明確轉換為浮點數或是雙精度浮點數,微軟提到,在未來的版本將會考慮直接在Half添加算數運算子。

由於.NET開始支援Half類型,填補了.NET生態系中的類型空白,許多數值函式庫可能會開始支援Half類型,而機器學習開發套件ML.NET,也有望開始使用Half,並且從中獲得計算上的好處。

熱門新聞

Advertisement