浮動小数点
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
] [
Twitter
]
開始行:
新人教育用資料です
#contents
*概要 [#j25afd1c]
-浮動小数点(FP[Floating Point])
数値を指数形式で表現する方式。
指数形式とは、例えば「12345」を「1.2345×10の4乗(1.2345E4...
「1.2345×10の4乗」の「1.2345」を「''仮数部''」、「4」を「...
*ビットレイアウト [#td90016b]
下図は単精度(float)の場合のレイアウト例。~
浮動小数点形式の標準規格である「IEEE 754」の単精度浮動小...
-指数部にはbiasとして127を足す。よって指数が0であれば127...
-Mantissa(仮数部)は、数を2進化してノーマライズ(後述)...
**仮数のノーマライズ [#c96b940a]
ノーマライズ(正規化)とは、桁数が一番上のものだけが整数...
仮数+指数という表現の場合、指数の取り方で何通りもの書き...
|10進表現|2進表現|2進で仮数+指数で表現|h
|3|11|11 x 2^0, 1.1 x 2^1, 0.11 x 2^2, …|
10進の3を2進で仮数+指数の形式で書くときには ''1.1 x ...
*例 [#q47cb0b0]
|表現したい数(10進)|符号|指数部(2進)|仮数部(2進)|全体(16...
|0.5|0|0111 1110|0|3f 00 00 00|
|1|0|0111 1111|0|3f 80 00 00|
|2|0|1000 0000|0|40 00 00 00|
|3|0|1000 0000|1|40 40 00 00|
|4|0|1000 0001|0|40 80 00 00|
|5|0|1000 0001|01|40 A0 00 00|
|6|0|1000 0001|1|40 C0 00 00|
|7|0|1000 0001|11|40 E0 00 00|
*C#で浮動小数点のメモリイメージをファイル出力してみる [#i...
こんな感じになる。
using System;
using System.IO;
class Class1
{
[STAThread]
static void Main(string[] args)
{
float f = 4f;
FileStream fs = new FileStream("test.dmp", FileMode.Cr...
BinaryWriter w = new BinaryWriter(fs);
w.Write(f);
w.Close();
fs.Close();
}
}
IntelアーキテクチャのCPUはリトルエンディアンなのでメモリ...
*精度と誤差について [#c7f328f1]
指数であるために、大小幅広い値をとれるが、精度はあくまで...
これは例えば以下のようなプログラムを書いて見ると実感でき...
using System;
class Class1
{
[STAThread]
static void Main(string[] args)
{
float f = 0.1f;
float f2 = 0;
for(int i = 0; i < 10000; i++ ) {
f2 += f;
}
Console.WriteLine(f2);
Console.ReadLine();
}
}
実行結果:
999.9029
*参考リンク [#v4021828]
Tutorial: Floating-Point Binary~
http://www.nuvisionmiami.com/books/asm/workbook/floating_...
IEEE Standard 754 Floating Point Numbers~
http://research.microsoft.com/~hollasch/cgindex/coding/ie...
終了行:
新人教育用資料です
#contents
*概要 [#j25afd1c]
-浮動小数点(FP[Floating Point])
数値を指数形式で表現する方式。
指数形式とは、例えば「12345」を「1.2345×10の4乗(1.2345E4...
「1.2345×10の4乗」の「1.2345」を「''仮数部''」、「4」を「...
*ビットレイアウト [#td90016b]
下図は単精度(float)の場合のレイアウト例。~
浮動小数点形式の標準規格である「IEEE 754」の単精度浮動小...
-指数部にはbiasとして127を足す。よって指数が0であれば127...
-Mantissa(仮数部)は、数を2進化してノーマライズ(後述)...
**仮数のノーマライズ [#c96b940a]
ノーマライズ(正規化)とは、桁数が一番上のものだけが整数...
仮数+指数という表現の場合、指数の取り方で何通りもの書き...
|10進表現|2進表現|2進で仮数+指数で表現|h
|3|11|11 x 2^0, 1.1 x 2^1, 0.11 x 2^2, …|
10進の3を2進で仮数+指数の形式で書くときには ''1.1 x ...
*例 [#q47cb0b0]
|表現したい数(10進)|符号|指数部(2進)|仮数部(2進)|全体(16...
|0.5|0|0111 1110|0|3f 00 00 00|
|1|0|0111 1111|0|3f 80 00 00|
|2|0|1000 0000|0|40 00 00 00|
|3|0|1000 0000|1|40 40 00 00|
|4|0|1000 0001|0|40 80 00 00|
|5|0|1000 0001|01|40 A0 00 00|
|6|0|1000 0001|1|40 C0 00 00|
|7|0|1000 0001|11|40 E0 00 00|
*C#で浮動小数点のメモリイメージをファイル出力してみる [#i...
こんな感じになる。
using System;
using System.IO;
class Class1
{
[STAThread]
static void Main(string[] args)
{
float f = 4f;
FileStream fs = new FileStream("test.dmp", FileMode.Cr...
BinaryWriter w = new BinaryWriter(fs);
w.Write(f);
w.Close();
fs.Close();
}
}
IntelアーキテクチャのCPUはリトルエンディアンなのでメモリ...
*精度と誤差について [#c7f328f1]
指数であるために、大小幅広い値をとれるが、精度はあくまで...
これは例えば以下のようなプログラムを書いて見ると実感でき...
using System;
class Class1
{
[STAThread]
static void Main(string[] args)
{
float f = 0.1f;
float f2 = 0;
for(int i = 0; i < 10000; i++ ) {
f2 += f;
}
Console.WriteLine(f2);
Console.ReadLine();
}
}
実行結果:
999.9029
*参考リンク [#v4021828]
Tutorial: Floating-Point Binary~
http://www.nuvisionmiami.com/books/asm/workbook/floating_...
IEEE Standard 754 Floating Point Numbers~
http://research.microsoft.com/~hollasch/cgindex/coding/ie...
ページ名: