C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

NaNやInifinityのバイナリデータ

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■94699 / inTopicNo.1)  NaNやInifinityのバイナリデータ
  
□投稿者/ hori (1回)-(2020/05/06(Wed) 23:02:29)

分類:[.NET 全般] 

以前から疑問なのですが、
Single.NaNやSingle.PositiveInfinity
Double.NaNやDouble.PositiveInfinity
というような値がありますが、
これをバイナリファイルとして出力すると、どういう値として保存されますか?

引用返信 編集キー/
■94700 / inTopicNo.2)  Re[1]: NaNやInifinityのバイナリデータ
□投稿者/ キングダム (57回)-(2020/05/07(Thu) 00:07:59)
No94699 (hori さん) に返信

BitConverter.DoubleToInt64Bits(Double) メソッド
https://docs.microsoft.com/ja-jp/dotnet/api/system.bitconverter.doubletoint64bits?view=netframework-4.8
>       NaN       FFF8000000000000
> -Infinity       FFF0000000000000
>  Infinity       7FF0000000000000

こうなるんじゃないかなと予想しますけど
どうすれば確認できるんでしょうね

BinaryWriterで出力してみればわかるんじゃないですか
どうやって出力しようとしてるのか知らないですけど


引用返信 編集キー/
■94701 / inTopicNo.3)  Re[2]: NaNやInifinityのバイナリデータ
□投稿者/ Hongliang (1022回)-(2020/05/07(Thu) 03:56:14)
C#のdouble/floatはSystem.Double/System.Singleのエイリアスであり、この2つの型はいずれもIEEE 754に準拠することになっています。
https://docs.microsoft.com/ja-jp/dotnet/api/system.double?view=netframework-4.8
https://docs.microsoft.com/ja-jp/dotnet/api/system.single?view=netframework-4.8

IEEE 754においてはビット表現が規定されています。以下の「交換形式」のところ。
https://ja.wikipedia.org/wiki/IEEE_754
それによると無限大及びNaNのビット表現は、
符号部:0または1(無限大の場合は0と1で別の値になるが、NaNの場合は別の値ではない)
指数部:全ビット1
仮数部:無限大では0、NaNでは0以外
ということになってますね。
無限大の場合は正負でそれぞれ1つの表現しかできませんが、NaNの場合は複数の表現が可能です。
どの表現になるかはCPUとNaNの導出方法次第ということになるでしょうかね。
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ