JavaScript重箱の隅  新JavaScript入門  JavaScript,Neo-Generation  掲示板  表紙
2. for  15. ビットシフト 
JavaScript 重箱の隅
Written 12/28/01
Number
以下、JScript5.5で試しています。

まず整数について。
整数は普通に4バイトの-231 〜 231-1 で定義されていると思われます。

  var a = 0x7FFFFFFF;   //231-1
  a--;                  //231-2
  a++;                  //231-1
  a++;                  //エラー
 
エラーが出るのはバグかな? でもこんなことする人はいないでしょうね。
負のほうも同じことです。
  var a = -0x80000000;  //-231
  a--;                  //エラー
 
ところが、インクリメントじゃなくて加算ならできるんですね。
  var a = 0x7FFFFFFF;
  a += 1;               //231
  a += 1;               //231+1
 
要するにインクリメント・デクリメントは整数のまま、 加算は8バイトの浮動小数点数に直して計算し、整数に直していると思われます。 いつか書くと思いますが、 それでインクリメント・デクリメントの方が動作が速いんですね。
そうではないみたいです(1/27/02)。

次に浮動小数点数の表示について探ってみましょう。 すなわち toString メソッドを働かせたときに返ってくる文字列について調べます。

  alert(0.000001)       //0.000001
  alert(0.000000999999) //9.99999e-7
  //alertは自動的にtoStringメソッドを用いていると思われる
 
1e-6以上なら小数表示、それより小さいときは指数表示なんですね。
大きいほうは、
  alert(1e21);          //1e+21
  alert(9.999e20);      //999900000000000000000
 
ということで、1e21以上なら指数表示、 それより小さいときは整数あるいは小数表示になります。
有効表示桁数は16桁のようです。
  alert(3.14159265358979323846);    //3.141592653589793
  alert(3.14159265358979323846e21); //3.141592653589793e+21
 
first, prev, next, exit