matlab といくつかの DLL 関数の間でデータをやり取りする必要があります。1 つ目立っているのは、matlab では NaN の正確な数値がわからないため、これらの値を考慮するために不要なデータ処理が行われることです。
matlab の NaN の正確な値または少なくとも値の範囲を知っている人はいますか?
次の 2 つのプリミティブ型を知ることに最も興味があります。
(1) float (32) の場合は NaN。
(2) double の NaN (64)。
MathworkのドキュメントによるとNaN
、Not-a-NumberのIEEE算術表現を返します。NaNは常に浮動小数点表現(floatまたはdouble)です-整数のNaNがあるとは思いません。
IEEE 754では、NaNはすべての指数ビットが1に設定され、小数部がゼロ以外の値である浮動小数点数として表されます(したがって、一般的なNaNを表す方法は実際には多くあります)。こちらの「特別な価値」をご覧ください。
手作業でNaNをテストする最も信頼できる方法は、特定の値を探すのではなく、すべての指数ビットが設定され、小数部がゼロ以外であることをテストすることです。
NaN
を使用して、特定のMATLAB 使用のビット パターンを調べることができますformat hex
。
>> format hex
>> NaN
ans =
fff8000000000000
>> single(NaN)
ans =
ffc00000
本当にしたい場合は、次のtypecast
ようにを使用して他の NaN を構築できます。
>> format long
>> otherNan = typecast( 1 + typecast( single(NaN), 'int32' ), 'single' )
otherNan =
NaN
>> isnan(otherNan)
ans =
1
>> format hex
>> otherNan
otherNan =
ffc00001