javascript の数値型

浮動小数点数の演算をしている事があるらしいというのを知った。仕事でそういうバグが出た。浮動小数点数の演算ではデータ構造や精度の問題で結果の予測が困難ってのは知ってたけど。javascript の数値の演算で浮動小数点数の演算を使うとは思わなかったな…。だって俺の知識では javascript の数値は 10 進数で 15 桁が最大値って話だったから。10 進数で 15 桁ってのはさ、32 bit でも 64 bit でも無いんですよ。32 bit なら 10 進数では符号付きで 9 桁が最大になるし、64 bit なら 10 進数では符号付きで 18 桁が最大になる。15 桁ってのは中途半端なんですよ。だから勝手に javascript 独自の decimal なんだとずっと思ってたんだけど。ちゃんと調べないとダメだな…。
15 桁って double の有効桁数なのか。それって割と一般的な話なのか。うーん。浮動小数点数って物の知識が足りないんだよなあ俺は。仮数部と指数部と符号からなるって事は分かるんだけどさ。最大値と最小値が何故あんな値になるのか良く分からん…。全く使って来なかったから。浮動小数点数って難しいんだよなあ。演算方法にも種類があるんだよな。速度優先演算とか精度優先演算とか。その辺りの理解が無いんですよねえ。VC++コンパイルオプションに浮動小数点数の演算方法ってのがあるんだけどさ。難しいんだよねアレ。解説ページ見たけど。このコンパイルオプションだとどういう時にどういう結果になるのかってのが英語で書いてあったっぽいんだけど、難しかったのでちゃんと読まなかった。何時か読みたいなあって思ってはいるんだけど、全く読んでいないなあ。
http://www.cc.kyoto-su.ac.jp/~yamada/pB/float.html
ここ読んだら何と無く分かったかも。指数部ってのは 2 の何乗って考え方だったんだな。10 の何乗じゃないのか。しかも指数部に特殊な制限があるんだなあ…。float の指数部は正だと 128 までで負だと 126 までなのか…。妙な制限だな。普通は 8 ビットなら正は 127 までで負は 128 までなのにな。ビットの使い方が特殊だわ。取り敢えずすっきりしたかも。