2011-06-29
■[JavaScript]amachangの"~~"以外で、Math.floor を使わずに小数を整数にしてみた
元ネタは
こちらです↓
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は同じスコアになりそうな気がするんですけどね。。。
トラックバック - http://d.hatena.ne.jp/babydaemons/20110629/JavaScript_without_Math_floor_function
リンク元
- 12 http://d.hatena.ne.jp/htsign/20120211/1328970561
- 10 http://d.hatena.ne.jp/amachang/20070813/1186980089
- 6 http://Dottext.com/Services/default.htm
- 4 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CFQQFjAB&url=http://d.hatena.ne.jp/babydaemons/20110629/JavaScript_without_Math_floor_function&ei=t93CT5LEH6XKmQXVlJC0Cg&usg=AFQjCNHKMtl4LU9820dn8xmVhJP1R-0vnw
- 3 http://twitter.com
- 3 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCsQFjAA&url=http://d.hatena.ne.jp/babydaemons/20110629/JavaScript_without_Math_floor_function&ei=18GCT8ipH6jNmAWCzpyQCA&usg=AFQjCNHKMtl4LU9820dn8xmVhJP1R-0vnw&sig2=pb_aD2pM
- 2 http://d.hatena.ne.jp/amachang/20110404/1301882703
- 2 http://htn.to/dneghD
- 2 http://search.yahoo.co.jp/search?p=bit演算+Javascript+"~~"+整数化&aq=-1&oq=&ei=UTF-8&fr=top_ga1_sa&x=wrt
- 2 http://www.google.co.jp/search?rlz=1C1RNPN_enJP419&sourceid=chrome&ie=UTF-8&q=Math.floor+変わり