XELF.Designer / Hexadecimal Floating Point
XMDの基礎となる形式をXONと呼ぶことにしています。テキスト形式におけるXONの数値表現に「16進浮動小数点数リテラル」を追加してみました。この「16進浮動小数点数リテラル」の本来のメリットは、以下の変換における丸め誤差の回避にあります。ただし現状は.NETマネージドコードのみによる単純な実装のため、パフォーマンスや誤差は評価できていません。
基数変換の丸め誤差
浮動小数点形式として通常使われるIEEE754が2進数に基づいているのに対して、浮動小数点の文字列表現には10進数がよく持ちられています。この相互変換には丸め誤差を含むことがあります。
16進浮動小数点数リテラル
Numeric := HexadecimalFP | HexadecimalFPAllowance | DecimalFP HexadecimalFP := Sign+"1."+Hex+"x"+Hex HexadecimalFPAllowance := Sign+"0" | Sign+"1" | Sign+"∞" | "NaN" Sign := "" | "+" | "-"
数値リテラルに16進浮動小数点数表現を使えるようにしました。特別な書式かつ制限があります。以下の例の1行目のように表します。2行目はD言語などでの表現です。
例
1.F4x9 = 0x1.F4p9 = 0b1.111101 × 20b1001 = (20 + 2-1 + 2-2 + 2-3 + 2-4 + 2-6) × 29 = 1.953125 × 512 = 1000
アセットの形式
デザインタイムでは柔軟なテキスト形式、ランタイムではスマートなバイナリ形式(たとえばXNAではContentPipeline)と考えています。