読者です 読者をやめる 読者になる 読者になる

amachangの"~~"以外で、Math.floor を使わずに小数を整数にしてみた

JavaScript

元ネタは

こちらです↓

id:amachangの発見

全ての数値演算を浮動小数点演算で行う言語仕様のJavaScriptでも、ビット演算を行う際にオペランドを得るために整数化が行われ、それを悪用するとw Math.floor()の代わりになる。

値不変のビット演算って

思いつくのは下記の4通りです。

<html>
<head>
<title>整数化のテスト</title>
</head>
<body>
<script type="text/javascript" language="javascript">
// 前準備
var floating_point_value = 3.14159;
// その1:論理積
alert(floating_point_value & -1);
// その2:論理和
alert(floating_point_value | 0);
// その3:排他的論理和
alert(floating_point_value ^ 0);
// その4:ビット反転×2回
alert(~~floating_point_value);
</script>
</body>
</html>

機械語レベルで考えると、1〜3は演算が1回の代わりにメモリからイミディエイトオペランドのロードが発生するが、4は演算が2回の代わりにレジスタのみで演算が完結すると一長一短です。で、JavaScriptではどうなるのかベンチマークを取ってみないと判りません。

おそらく、1〜3は同じスコアになりそうな気がするんですけどね。。。