teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

追記対応

2017/06/20 15:51

投稿

otn
otn

スコア86365

answer CHANGED
@@ -7,4 +7,14 @@
7
7
 
8
8
  以前色々検索したのですが、PDP-11の浮動小数点フォーマットを記した日本語ページは見つかりませんでした。インターネット以前のIT界情報は少ないです。
9
9
  私の記憶では、上記以外は、ビット構成など同じだったはずです。
10
- IEEE754を知った時、「え?仮数部が1以上2未満なの?」とビックリした記憶があります。
10
+ IEEE754を知った時、「え?仮数部が1以上2未満なの?」とビックリした記憶があります。
11
+
12
+ #追記に対して
13
+ > 仮数部の16進数を10進数に直すと、6141635となります。
14
+
15
+ そこがそもそも間違っています。
16
+
17
+ 0x5db6c3は、小数部ですが、23bitなので、省略された24bit目に整数部1を付けて、0xddb6c3 が仮数です。小数点は、先頭ビットの次にありますので2進数で表すと、0b1.101 1101 1011 0110 1100 0011 。指数は 0x7fから127を引いて0ですね。
18
+ 仮数部を0.5以上にしないといけないので、仮数を2で割って、指数に1を足します。全体の値としては変わりません。仮数を2で割るというのは、2進数で小数点を1桁左へ移動させるということなので、0b0.1101 1101 1011 0110 1100 0011
19
+ 仮数を10進数に直すと、0.5+0.25+0.0625+(以下略) = 0.8660699~
20
+ これに2の1乗を掛けた物が、元の数値になります。

3

訂正

2017/06/20 15:51

投稿

otn
otn

スコア86365

answer CHANGED
@@ -1,7 +1,7 @@
1
1
  > EEE754が規定される前に作られた関数なのかな・・?と考えましたが・・・
2
2
 
3
3
  その通り、歴史的理由です。
4
- C言語がUnix上で発展してきた事はご存じでしょうが、Unixは今は無きDEC(COMPAQが吸収合併さらにHPと合併)のPDP-11というコンピューター(ミニコン)上で誕生しました。
4
+ C言語がUnix上で発展してきた事はご存じでしょうが、初期のUnixは今は無きDEC(COMPAQが吸収合併さらにHPと合併)のPDP-11というコンピューター(ミニコン)上で動いていました。
5
5
  PDP-11や後継のVAX-11が使っていた浮動小数点は、仮数部が0.5以上1未満になるように正規化されていました。
6
6
  Unix上のCで扱う浮動小数点型の関数はそれをモデルにしていますので、その後に定められたIEEE754(仮数部が1以上2未満)とその点が合いません。
7
7
 

2

誤字訂正

2017/06/20 01:20

投稿

otn
otn

スコア86365

answer CHANGED
@@ -1,7 +1,7 @@
1
1
  > EEE754が規定される前に作られた関数なのかな・・?と考えましたが・・・
2
2
 
3
3
  その通り、歴史的理由です。
4
- C言語がUnix上で発展してきた事はご存じでしょうが、Unixは今は無きDEC(COMPAQが吸収合併さらにHPと合併)のPDP-11とうコンピューター(ミニコン)上で誕生しました。
4
+ C言語がUnix上で発展してきた事はご存じでしょうが、Unixは今は無きDEC(COMPAQが吸収合併さらにHPと合併)のPDP-11とうコンピューター(ミニコン)上で誕生しました。
5
5
  PDP-11や後継のVAX-11が使っていた浮動小数点は、仮数部が0.5以上1未満になるように正規化されていました。
6
6
  Unix上のCで扱う浮動小数点型の関数はそれをモデルにしていますので、その後に定められたIEEE754(仮数部が1以上2未満)とその点が合いません。
7
7
 

1

訂正

2017/06/20 00:41

投稿

otn
otn

スコア86365

answer CHANGED
@@ -1,7 +1,7 @@
1
1
  > EEE754が規定される前に作られた関数なのかな・・?と考えましたが・・・
2
2
 
3
3
  その通り、歴史的理由です。
4
- C言語がUnix上で発展してきた事はご存じでしょうが、Unixは今は無きDEC(HPが吸収合併)のPDP-11とうコンピューター(ミニコン)上で誕生しました。
4
+ C言語がUnix上で発展してきた事はご存じでしょうが、Unixは今は無きDEC(COMPAQが吸収合併さらにHPと合併)のPDP-11とうコンピューター(ミニコン)上で誕生しました。
5
5
  PDP-11や後継のVAX-11が使っていた浮動小数点は、仮数部が0.5以上1未満になるように正規化されていました。
6
6
  Unix上のCで扱う浮動小数点型の関数はそれをモデルにしていますので、その後に定められたIEEE754(仮数部が1以上2未満)とその点が合いません。
7
7