練炭ブログ

X680x0、Irvine、DMonkey、Proxomitron などの情報を扱ってます。

AKIBA PC Hotline!のCPU・HDD/SSD・メモリ最安値情報が終了

コメントなし»

HDD/SSD最安値情報

□お知らせ
 隔週で掲載しておりましたCPU・HDD/SSD・メモリ最安値情報ですが、今週掲載分をもちまして終了とさせていただきます。今後の価格動向につきましては、「サハロフ佐藤の相場月報」や「お買い得価格情報」でお伝えしますので、そちらをご確認ください。

うーん、残念。

買い物の参考にしてましたし、ただ値段の上下を見るだけでも楽しかったです。

メモリ最安値情報はメモリモジュールが大容量化しても容量あたり単価が 1MB のまま変わらなかったので、有効数字1桁になってしまって分かりにくかったのもいい思い出。

akibapchotline_seagate
リンク先より引用。

Proxomitron: pixiv.js

コメントなし»

添付ファイル:pixiv_20130416.zip

  • HTML や画像 URL の変更に対応。
  • ソースコード整理。使っていない機能を削除。

DMonkey: void 演算子、++ 演算子、-- 演算子

コメントなし»

void 演算子は JavaScript では undefined を返しますが、DMonkey は null を返します。

alert (void 1);   // null

++ 演算子、-- 演算子は小数部を最近接偶数への丸め(round half to even)で整数化したあとに +1、-1 します。

var a = 1.2;
alert (++a);   // 2

var b = -2.5;
alert (--b);   // -3

おまけ。

alert (nameOf ({ }.prototype));   // Prototype

DMonkey: 数値リテラル

コメントなし»

数値リテラルの表記に誤りがあると通常は SyntaxError が発生しますが、一部のパターンではエラーにならず NaN として解釈されます。

alert (1e2x);   // NaN
alert (1e2.0);   // NaN

16進数リテラル 0x80000000 ~ 0xffffffff、0x8000000000000000 ~ 0xffffffffffffffff は負数になります。

0x0 ~ 0xffffffff は32ビット値を符号付き整数として、0x100000000 ~ 0xffffffffffffffff は64ビット値を符号付き整数として解釈しているのかもしれません。

alert (0x7fffffff);   // 2147483647
alert (0x80000000);   // -2147483648
alert (0xffffffff);   // -1
alert (0x100000000);   // 4294967296
alert (0x7fffffffffffffff);   // 9.22337203685478E18
alert (0x8000000000000000);   // -9.22337203685478E18
alert (0xffffffff00000000);   // -4294967296
alert (0xffffffffffffffff);   // -1

次世代 Nexus 7 の噂

コメントなし»

現行モデルが Tegra 3 だから次世代は Tegra 4 かと思ったら、Snapdragon かー。

スペック大幅アップで安くなるんじゃ、もう買うしかないじゃない!

DMonkey: if/else ブロック内での関数定義

コメントなし»
(function () {
  alert (typeof foo + (typeof foo == 'undefined' ? '' : foo ()));
  if (true) {
    function foo () { return '#1'; }
  }
  else {
    function foo () { return '#2'; }
  }
  alert (typeof foo + (typeof foo == 'undefined' ? '' : foo ()));
}) ();
ブラウザ 1回目の alert 2回目の alert
IE function#2 function#2
Chrome function#2 function#2
Firefox undefined function#1
DMonkey undefined function#1

truefalse に変更した場合。

ブラウザ 1回目の alert 2回目の alert
IE function#2 function#2
Chrome function#2 function#2
Firefox undefined function#2
DMonkey undefined function#2

IE と Google Chrome は if/else ブロックのなかにあっても関数本体での定義として解釈され、後から記述した方(#2)が関数内全域で有効となります。

Firefox と DMonkey では、関数文が実行された時点でその関数(#1 または #2)が定義されます。

DMonkey: シフト演算子

コメントなし»

DMonkey のシフト演算子は JavaScript と異なります。

JavaScript DMonkey
<< 演算 符号なし左シフト
結果 -2147483648~2147483647
>> 演算 符号あり右シフト 符号なし右シフト
結果 -2147483648~2147483647 -2147483648~2147483647
>>> 演算 符号なし右シフト 符号なし右シフト
結果 0~4294967295 -2147483648~2147483647

見にくい表で申し訳ない。

今回は、シフトの際の符号の有無と演算結果を符号ありとなしのどちらとして解釈するかだけしか調べていません。それ以外で違うところもあるかも知れません。

DMonkey: ビット演算における小数の扱い

コメントなし»

JavaScript でビット演算のオペランドに小数を指定した場合、小数部を 0 方向に切り捨てて(round towards zero)、32ビットの整数に変換してから演算されます。

DMonkey では小数部を最近接偶数への丸め(round half to even)で整数化するため、演算結果が異なります。

alert (+1.5 | 0);   //  2 ※JavaSciprt では  1
alert (0 | -1.5);   // -2 ※JavaSciprt では -1

DMonkey: number.toExponential()

コメントなし»

number.toExponential ([digits])

Number オブジェクトのメソッド。
数を10進指数表記の文字列に変換します。

digits は小数部分の桁数を 1~17 で指定します(省略時は 1)。

丸めの方法は四捨五入で、負数は絶対値として丸めます(round half away from zero)。

JavaScript では digits を省略すると数を表現するのに必要な桁数として処理されますが、DMonkey では単に 1 が指定されたものとして動作します。

DMonkey: number.toFixed() / number.toPrecision()

コメントなし»

number.toFixed ([digits])

Number オブジェクトのメソッド。
数を10進固定小数点表記の文字列に変換します。

digits は小数部分の桁数を 0~18 で指定します(省略時は 0)。負数を指定すると整数部分を丸め、小数部分は18桁の '0' で埋められます。

丸めの方法は四捨五入で、負数は絶対値として丸めます(round half away from zero)。

数が 1e15 以上の場合は、digits の指定にかかわらず .toString() の結果と同じ文字列が返されます(多分)。

なお、alert (-1.25.toFixed (1)); で 0 と表示されるのは、number.toFixed の動作ではなく、

-1.25.toFixed (1)
= -(1.25.toFixed (1))
= -('1.3')
= -'1.3'

となり、-'1.3' は 0 になるという DMonkey の型変換の挙動の影響です(parseInt と同じ感じ)。

number.toPrecision ([digits])

JavaScript の number.toPrecision() は、有効数字を digits で指定した桁数に変更して文字列化するメソッドですが、DMonkey においてはそれとは異なり .toFixed() と同じ動作として実装されているようです。混乱防止のため、DMonkey においては .toPrecision() は一切使わない方がよいでしょう。