Actionscript 3 で int と uint の演算がどのように機能するかについて、正式な仕様に出くわした人はいますか? (「信頼できる」とは、「Adobe から提供された」または「Adobe によって信頼できると宣言されている」ことを意味します)。特に、2 32を法とする整数乗算を行うサポートされている方法を探しています。これは、私が見つけた Adobe ドキュメントではカバーされていません。
Actionscript は ECMAScript に基づいていると主張していますが、ECMAScript は整数演算をまったく行いません。IEEE-754 double ですべてを実行し、ビット単位の演算の前に結果を法 2 32に減らします。これにより、ほとんどの場合、整数演算がシミュレートされます。ただし、これは乗算には機能しません。乗算の真の結果、たとえば 0x10000001 * 0x0FFFFFFF は double の仮数には長すぎるため、指定が文字どおりに行われると下位ビットが失われます。
ここで、Actionscript を入力します。2 つのor変数を乗算し、積をorにすぐにキャストすると、常に正確な結果が得られるように思われることが実験的にわかりました。ただし、生成された AVM2 バイトコードには、単純な「mul」命令が含まれているだけで、浮動小数点ではなく整数の結果を生成することになっていることを直接示すものはありません。仮想マシンは、これを見つけるために先を見なければなりません。実験で運が良かっただけで、信頼できるものではなくボーナスとして余分な精度を得たのではないかと心配しています.int
uint
int
uint
(1 つには、私の実験はすべて x86 Flash プレーヤーを使用して実行されました。おそらく、それは中間結果を Intel 80 ビット double として表すか、またはそれが何に使用されるかがわかるまで評価スタックに 64 ビット int を格納します。どちらもネイティブの 32×32→64 乗算命令がない非 x86 タブレットで簡単に可能になるため、VM は ECMAScript 標準で指定されている精度まで下げることを決定する可能性がありますか?)
24 時間の状況: Mike Welsh は適切な調査を行い、非常に役立つリンクを提供しましたが、残念ながら質問を閉じるには不十分です。他の誰か?
(tl;dr コメントでの討論: whitequark は、答えが「いいえ」である可能性がある私の仮説的な理由の 1 つにある程度反論します。彼の指摘にはメリットがありますが、もちろん答えが「はい」であることを示すものではありません。 )。