Π‘ΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ gcc, clang, msvc, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΡΡΠΎΠ²Π½ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ fp IEEE Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠ°Π³ΠΌ ΠΈΠ»ΠΈ ΡΠ»Π°Π³ΠΎΠ² Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ /fp(strict-fast), ffast-math, -ffp-contract ΠΈ Ρ. Π΄. ΠΡΠΈ ΡΠ»Π°Π³ΠΈ ΠΏΠΎΠ»Π΅Π·Π½Ρ Π΄Π»Ρ ΡΠΈΡΠΎΠΊΠΎΠ³ΠΎ ΡΠΏΠ΅ΠΊΡΡΠ° Π·Π°Π΄Π°Ρ. ΡΡΠ΄ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ML-ΡΠ²Π΅ΡΡΠΊΠΈ, DSP, Π½ΠΈΠ·ΠΊΠΎΡΠΎΡΠ½ΡΠ΅ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅/ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π΄Π²ΠΈΠΆΠΊΠΈ...), Π³Π΄Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°ΡΡ ΠΊΠΎΠΌΠΏΡΠΎΠΌΠΈΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΠΉ ΡΠΎΡΠ½ΠΎΡΡΡΡ ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡΡ.
ΠΡΠΈΡΠΎΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠΌ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ Π½Π°ΡΡΡΠΎΠ΅ΠΊ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ². ΠΡΠΈ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ/ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠ΅Π½ΠΈΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°ΠΌ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΉ Fp, Π»ΡΡΡΠΈΠΉ Π²ΡΠ±ΠΎΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ (ΡΠ»ΠΈΡΠ½ΠΈΠ΅/fma), ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΈ ΡΠΌΡΠ³ΡΠ΅Π½Π½ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ.
Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΡΡΠΈ ΡΠ»Π°Π³ΠΈ, ΡΠΊΠ°Π·Π°Π½Π½ΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌΠΈ Π΄Π»Ρ Wasm, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠ΅ΠΏΠΎΡΠΊΠΎΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°, ΠΈ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ ΡΡΠΈΡΡΠ²Π°ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· Π½ΠΈΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, https://github.com/WebAssembly/binaryen/pull/3155). ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΡΡΠΈΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ Π±ΡΠ΄Π΅Ρ ΠΎΡΠ±ΡΠΎΡΠ΅Π½Π°, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½Ρ/Π½Π΅ Π²ΠΈΠ΄Π½Ρ Π΄Π»Ρ ΡΡΠ΅Π΄Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ Π·Π°Ρ ΠΎΡΡΡ ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ.
Π‘ΡΠ΅Π΄Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Wasm ΠΌΠΎΠ³ΡΡ Π²ΡΠΈΠ³ΡΠ°ΡΡ ΠΎΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΡΠΈΠΌ ΡΠ»Π°Π³Π°ΠΌ/ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ°ΠΌ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°, ΡΡΠΎΠ±Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΈ Π²ΡΠ±ΠΎΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ, ΠΊΠΎΠ³Π΄Π° ΡΡΠΎ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ. ΠΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΉ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π² ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°Ρ AOT wasm. ΠΡΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΡΠ΅ΡΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡΡ Π² SIMD-ΠΊΠΎΠ΄Π΅ FP Wasm, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ ΠΎΠΊΡΡΠ³Π»Π΅Π½ΠΈΠ΅, ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅/ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈ Ρ. Π΄. ΠΠ΄ΠΈΠ½ ΠΈΠ· Π²ΡΡΠΎΠΊΠΈΡ ΡΡΠΎΠ²Π½Π΅ΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π΅ Π·Π°Π²ΠΈΡΠ΅ΡΡ ΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΉ FP ΠΈ ΡΠ΄Π°Π»ΡΠ΅Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΡΠΈΠΊ Π΄Π»Ρ Wasm Π΄Π»Ρ Π±ΠΎΠ»Π΅Π΅ ΡΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ Π½Π°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ.
Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΏΡΠ΅ΡΠ΅Π΄Π΅Π½Ρ JVM 1.2, ΠΎΡΠ»Π°Π±Π»ΡΡΡΠΈΠΉ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ IEEE Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅ΠΆΠΈΠΌΠ° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈ Π²Π²ΠΎΠ΄ΡΡΠΈΠΉ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡ strictfp Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡΠΈ Ρ Π΄Π΅ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΠΊΠ»Π°ΡΡΠΎΠ²/ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ²/ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ². Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΠ·ΡΡΠΈΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π΄Π»Ρ Wasm.
Π― Ρ ΠΎΡΠ΅Π» Π±Ρ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π΄Π»Ρ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ»Π°Π³ΠΎΠ² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ fp IEEE Π² Π΄Π²ΠΎΠΈΡΠ½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ Wasm, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ°ΠΌΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΠ°ΠΊ ΠΈ Π² ΡΠ»ΡΡΠ°Π΅ Ρ ΡΠΎΠ΄Π½ΡΠΌΠΈ ΡΠ·ΡΠΊΠ°ΠΌΠΈ, ΡΠ°ΠΌΠΈ ΡΠ»Π°Π³ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΊΠ°ΠΊ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠ΅, ΠΈ ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΠ±ΠΎΡΠΎΠΌ ΡΡΠ΅Π΄Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΠ»ΠΈΡΠ½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΡΠ²Π»ΡΡΡΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡΠΈ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠΈ Π½Π° Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅ ΠΈ ΠΌΠ΅Π½ΡΡΠ΅ΠΉ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ. ΠΡΠ΅Π΄Π»Π°Π³Π°Π΅ΠΌΡΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎ ΠΌΠ°ΡΠΊΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ°ΡΡΠΊΠΈ ΠΊΠΎΠ΄Π° Π² Π΄Π²ΠΎΠΈΡΠ½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ Wasm Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠΈΡ ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠ΅Π½ΠΈΠΉ/Π½Π°ΠΌΠ΅ΠΊΠΎΠ² Π½Π° ΡΡΠ΅ΠΏΠ΅Π½Ρ Π΄Π΅ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π±Π»ΠΎΠΊΠ° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ.
ΠΠΈΠ·Π°ΠΉΠ½ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅ΡΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ ΠΏΡΠΎΠ΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ. ΠΠ΄ΠΈΠ½ ΠΈΠ· Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² β Π²Π²Π΅ΡΡΠΈ Π½ΠΎΠ²ΡΠΉ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠΉ ΡΠ°Π·Π΄Π΅Π» Ρ Π·Π°ΠΏΠΈΡΡΠΌΠΈ, ΠΎΡΠΌΠ΅ΡΠ°ΡΡΠΈΠΌΠΈ ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠ΅Π½ΠΈΡ ΠΈ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠΎΠ² ΠΊΠΎΠ΄Π°, Π° Π΄ΡΡΠ³ΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ β Π²Π²Π΅ΡΡΠΈ Π½ΠΎΠ²ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ Π΄Π»Ρ ΠΌΠ°ΡΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠΎΠ² ΠΊΠΎΠ΄Π° ΡΡΠΈΠΌΠΈ ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠ΅Π½ΠΈΡΠΌΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°, ΠΊΠ°ΠΊ Π² JVM. ΠΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ ΡΠ»Π°Π³ΠΈ Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΠΌΠΎΠ³ΡΡ ΠΎΠ±ΡΡΠΆΠ΄Π°ΡΡΡΡ ΠΈ Π²ΠΊΠ»ΡΡΠ°ΡΡΡΡ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ ΠΏΡΠΎΠ΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, -fp-finate-math-only, -fp-no-signed-zeros..)
ΠΡΠΎΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ ΠΏΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ Scalar / Vector FMA ΠΈ Π°ΠΏΠΏΡΠΎΠΊΡΠΈΠΌΠ°ΡΠΈΠΈ FP Π² ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Wasm ΠΈ/ΠΈΠ»ΠΈ SIMD.
ΠΡΠΎΡ Π²ΡΠΏΡΡΠΊ Π΄Π»Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ° ΠΊ Π΄Π°Π½Π½ΠΎΠΉ ΡΠ΅ΠΌΠ΅ ΠΈ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ Π² CG sync.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΡΠΎΠ³ΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ fp Π²Π»ΠΈΡΠ΅Ρ Π½Π° ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Ρ ΠΎΠΆΠΈΠ΄Π°Ρ, ΡΡΠΎ Π»ΡΡΡΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ΄Π΅Π»Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ Π±ΠΎΠ»Π΅Π΅ ΡΠ°Π·ΡΠ΅ΡΠ°ΡΡΡΡ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΡ β ΡΡΠΎ Π²Π²Π΅ΡΡΠΈ Π½ΠΎΠ²ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, Π° Π½Π΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΡΠ°Π·Π΄Π΅Π» ΠΈΠ»ΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ Π±Π»ΠΎΠΊΠ°. Π£ Π½Π°Ρ ΡΠΆΠ΅ Π΅ΡΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π½Π΅Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΠ·ΠΌΠ° Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ ΠΈΠ·-Π·Π° Π½Π°ΡΠΈΡ ΠΏΡΠ°Π²ΠΈΠ» ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΡ NaN, ΠΏΠΎΡΡΠΎΠΌΡ Ρ ΠΎΠΆΠΈΠ΄Π°Ρ, ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΡΡΠΎ Π²Π²Π΅ΡΡΠΈ Π½ΠΎΠ²ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ².
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° JVM, ΡΠΎ ΡΠ²ΠΎΠ΅ΠΉ ΡΡΠΎΡΠΎΠ½Ρ, ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ strictfp
ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΡΠΎΠ³ΠΎΠΉ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠΈ.
Π»ΡΡΡΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ΄Π΅Π»Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ Π±ΠΎΠ»Π΅Π΅ ΡΠ°Π·ΡΠ΅ΡΠ°ΡΡΡΡ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΡ β ΡΡΠΎ Π²Π²Π΅ΡΡΠΈ Π½ΠΎΠ²ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, Π° Π½Π΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΡΠ°Π·Π΄Π΅Π» ΠΈΠ»ΠΈ Π±Π»ΠΎΡΠ½ΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ.
ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΡΡ
ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Π½ΠΎ ΠΎΠ½ΠΎ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ»ΠΈΡΠΊΠΎΠΌ Ρ
ΠΎΡΠΎΡΠΎ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΡΡΡΠ°Π½ΡΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ ΠΎΡ ΡΠ΅ΠΏΠΎΡΠΊΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ². ΠΠ½ΡΡΡΡΠΊΡΠΈΠΈ Ρ Ρ
ΠΎΡΠΎΡΠ΅ΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ fma, reciprocal ΠΈ Ρ. Π΄., ΡΠ²Π»ΡΡΡΡΡ Ρ
ΠΎΡΠΎΡΠΈΠΌΠΈ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°ΡΠ°ΠΌΠΈ Π½Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΡΡ
ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ. ΠΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ/ΡΠ»Π°Π³ΠΈ, ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΠΌΡΠ΅ Π½Π°ΡΠΈΠ²Π½ΡΠΌΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°ΠΌΠΈ, Π²Π΅ΡΡΠΌΠ°
-fassociative-math
-ffast-math
-fno-honor-nans
-ffinate-math-only
-fdenormal-fp-math
-fno-strict-float-cast-overflow
-fno-math-errno
-fno-trapping-math
...
ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΈΠ· Π½ΠΈΡ
ΡΠ²Π»ΡΡΡΡΡ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ°ΠΌΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΌΠΈ Π±ΠΎΠ»Π΅Π΅ Π°Π³ΡΠ΅ΡΡΠΈΠ²Π½ΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ fp, ΡΠ½ΠΈΠΌΠ°Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π½Π° Π°Π»Π³Π΅Π±ΡΠ°ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ, nans, Π½ΡΠ»ΠΈ ΡΠΎ Π·Π½Π°ΠΊΠΎΠΌ, Π»ΠΎΠ²ΡΡΠΊΠΈ, ΠΎΠΊΡΡΠ³Π»Π΅Π½ΠΈΠ΅ ΠΈ Ρ. Π΄. ΠΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅Ρ
ΠΏΠΎΠ»Π΅Π·Π½ΡΡ
ΡΠ»Π°Π³ΠΎΠ² Π² Π²ΠΈΠ΄Π΅ Π½ΠΎΠ²ΡΡ
ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΡΠΌ imo.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° JVM, ΡΠΎ ΡΠ²ΠΎΠ΅ΠΉ ΡΡΠΎΡΠΎΠ½Ρ, ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ strictfp ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΡΠΎΠ³ΠΎΠΉ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠΈ.
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ @sunfishcode Π·Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ! Π― Π½Π΅ Π·Π½Π°Π» ΠΎΠ± ΡΡΠΎΠΌ Π½ΠΎΠ²ΠΎΠΌ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ ΠΈ, ΠΏΠΎΡ ΠΎΠΆΠ΅, ΠΌΠΎΡΠΈΠ²Π°ΡΠΈΡ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡΡ Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ. ΠΡΠΈ Π±Π»ΠΈΠΆΠ°ΠΉΡΠ΅ΠΌ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΠΈ Java strict-fp ΠΊΠ°ΠΆΠ΅ΡΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΠΈ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Ρ ΠΎΡΠΎΡΠΈΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΡ ΡΠΎΡΠ΅ΠΊ, ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΠΌΡΡ gcc/clang. Π€Π»Π°Π³ΠΈ -ffast-math ΠΈ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ Π½ΠΈΠΌΠΈ ΡΠ»Π°Π³ΠΈ ΠΊΠ°ΠΆΡΡΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠΌΠΈ Π² Π½Π°ΡΠΈΠ²Π½ΡΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΡ ΠΈΠ· Π±ΡΡΡΡΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° Π½Π° github. Π― ΠΏΠ»Π°Π½ΠΈΡΡΡ ΠΈΠ·ΡΡΠΈΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΡΡΠ΅ΡΠΊΠ°Π·Π°Π½Π½ΡΡ ΡΠ»Π°Π³ΠΎΠ² ΠΈ ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ Π½ΠΈΠΌΠΈ ΠΏΠ°ΡΠ³ΠΌ.
Π’ΠΈΠΏΠΈΡΠ½ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠ΅ gcc/clang -ffast-math, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΡΡΡΡ Π² ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΊΠΎΠ΄. Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠ΅ ΠΈΡ , ΠΎΠ±ΡΡΠ½ΠΎ ΡΠ΅ΡΡΠΈΡΡΡΡ Π²ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ Π½Π°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½ΠΈ ΡΠ°ΠΌΠΈ ΡΠΎΠ·Π΄Π°ΡΡ. Π ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²ΡΠ΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠ΅ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΠ΅ ISA ΠΈΠΌΠ΅ΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ, ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π»ΠΈ ΡΡΠΈ Π²Π°ΡΠΈΠ°Π½ΡΡ, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ²Π΅ΡΠ΅Π½Ρ, ΡΡΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡ Π΄Π»Ρ ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ. Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΡΠ°ΠΊ ΠΆΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ WebAssembly Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ; ΠΎΠ½ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½, ΠΊΠ°ΠΊ ΠΈ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΠ΅ ISA, ΠΏΠΎΡΡΠΎΠΌΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠ΅ Π΄Π°Π²Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ -ffast-math ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΎΠ½ Β«ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π΄Π»Ρ Π½ΠΈΡ Β», ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ.
Π€Π»Π°Π³ -ffast-math ΡΡΠΎΠ²Π½Ρ WebAssembly Π±ΡΠ΄Π΅Ρ ΠΎΠ·Π½Π°ΡΠ°ΡΡ, ΡΡΠΎ WebAssembly Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΠΏΠΎΡ ΠΎΠΆ Π½Π° Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΡ ISA Π² ΡΡΠΎΠΌ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΈ ΠΈ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΡΠΈ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π±ΡΠ΄ΡΡ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΠΈΠΌΠΈ Π΄Π²ΠΎΠΈΡΠ½ΡΠΉ ΡΠ°ΠΉΠ», Π½ΠΎ ΠΏΡΠΈ ΠΎΡΠΏΡΠ°Π²ΠΊΠ΅ wasm ΡΠ²ΠΎΠΈΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠΆΠΈΠ΄Π°ΡΡ, ΡΡΠΎ ΡΠΌΠΎΠ³ΡΡ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π΅Π³ΠΎ Π½Π° Π΄ΡΡΠ³ΠΎΠΌ ΠΎΠ±ΠΎΡΡΠ΄ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈΡ Π΄Π²ΠΈΠΆΠΊΠ°Ρ . Π‘ ΡΠ»Π°Π³Π°ΠΌΠΈ, ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΌΠΈ Π±ΡΡΡΡΠΎΠΉ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠ΅, Π½Π° ΡΡΠΎΠ²Π½Π΅ WebAssembly, WebAssembly Π½Π΅ Π±ΡΠ΄Π΅Ρ Π²Π΅ΡΡΠΈ ΡΠ΅Π±Ρ ΠΊΠ°ΠΊ ISA, ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΡΠΌΠΎΠ³ΡΡ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ, ΠΎΡΠ»ΠΈΡΠ½ΡΠ΅ ΠΎΡ ΡΠ΅Ρ , Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π» ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ.
Π’Π°ΠΊΠΆΠ΅ ΡΡΠΎΠΈΡ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΠΏΡΠΎΠ΅ΠΊΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠ΅ ΡΡΠΈ ΡΠ»Π°Π³ΠΈ, ΡΠ΅Π³ΠΎΠ΄Π½Ρ Π½Π΅ ΡΠ΅ΡΡΡΡΡΡ ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π² WebAssembly. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ, Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ -fassociative-math, ΡΠ²Π»ΡΡΡΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΠΌΠΈ, ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ Π½Π° ΡΠΈΠΊΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ LLVM ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π΄ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ WebAssembly.
ΠΠ°, Π»ΡΠ±ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ, Π²Π»ΠΈΡΡΡΠΈΠ΅ Π½Π° ΡΠΎΡΠ½ΠΎΡΡΡ/ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ float, Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Ρ Π² ΠΌΠΎΠ΄ΡΠ»Ρ Wasm Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ². ΠΠΎΠ²ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ Π΄Π»Ρ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΎ ΡΠ΅ΠΊΡΡΠΈΠΌΠΈ.
Π£ Π½Π°Ρ Π±ΡΠ»Π° Π΄ΠΈΡΠΊΡΡΡΠΈΡ Π½Π° ΡΡΡ ΡΠ΅ΠΌΡ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΌ ΡΠΎΠ±ΡΠ°Π½ΠΈΠΈ CG Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π½ΠΎΠ²ΠΎΠΉ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΊΠ°ΠΊ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΡΠ΅Π΄ΡΡΠ²Π° Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΡ ΡΠ΅Π»ΠΈ. ΠΠΎ-Π²ΠΈΠ΄ΠΈΠΌΠΎΠΌΡ, ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΎΠ±ΡΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΠ΅Ρ ΠΊ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ Π²ΠΎΠΏΡΠΎΡΠ° Π² ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ. Π£ ΠΌΠ΅Π½Ρ Π½Π΅Ρ Π²ΠΎΠ·ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ, Π΅ΡΠ»ΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² Π² ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΈ ΠΏΡΠΈΡΠΎΡΡΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΡΠ΅ΠΏΠΎΡΠΊΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² ΠΈ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΎΡΡΡΡΡΡΠ²ΡΡΡΠΈΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΎΠΏΡΠ°Π²Π΄ΡΠ²Π°ΡΡ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ ΡΡΠΈΡ ΡΠ»Π°Π³ΠΎΠ² Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΡΡΠ°Π²Ρ ΠΏΠΎΠ΄ ΡΠ³ΡΠΎΠ·Ρ ΡΡΠΎΠ²Π΅Π½Ρ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ Wasm. ΠΡΠ΄Π΅Ρ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΠΎΠ½ΡΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΡΠ΅ΠΌΠ°Π½ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π²Π°ΡΠΈΠ°Π½ΡΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡ Π΄Π»Ρ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ ΡΠ΅Π»ΠΈ. Π£ Π½Π°Ρ Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π½ΠΎΠ²ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ, ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ SIMD, ΠΊΠΎΡΠΎΡΡΠ΅, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠ°ΡΡΠΈΡΠΈΡΡ, ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°Π»ΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΠΌ Π΄Π»Ρ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠ»Π°Π³ΠΎΠ² Π±ΡΡΡΡΠΎΠΉ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠΈ. ΠΡΠ΄Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ ΠΈΡΠΊΠ°ΡΡ Π² ΡΡΠΎΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ.
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΠΎΡΠ²Π΅Ρ.
ΠΠΎΠ½ΡΠ΅Π½Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Π΄Π»Ρ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΠΎΠΉ Π³ΡΠ°ΡΠΈΠΊΠΈ. Wasm ffast-math.pptx
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
Π’ΠΈΠΏΠΈΡΠ½ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠ΅ gcc/clang -ffast-math, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΡΡΡΡ Π² ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΊΠΎΠ΄. Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠ΅ ΠΈΡ , ΠΎΠ±ΡΡΠ½ΠΎ ΡΠ΅ΡΡΠΈΡΡΡΡ Π²ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ Π½Π°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½ΠΈ ΡΠ°ΠΌΠΈ ΡΠΎΠ·Π΄Π°ΡΡ. Π ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²ΡΠ΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠ΅ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΠ΅ ISA ΠΈΠΌΠ΅ΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ, ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π»ΠΈ ΡΡΠΈ Π²Π°ΡΠΈΠ°Π½ΡΡ, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ²Π΅ΡΠ΅Π½Ρ, ΡΡΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡ Π΄Π»Ρ ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ. Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΡΠ°ΠΊ ΠΆΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ WebAssembly Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ; ΠΎΠ½ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½, ΠΊΠ°ΠΊ ΠΈ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΠ΅ ISA, ΠΏΠΎΡΡΠΎΠΌΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠ΅ Π΄Π°Π²Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ -ffast-math ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΎΠ½ Β«ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π΄Π»Ρ Π½ΠΈΡ Β», ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ.
Π€Π»Π°Π³ -ffast-math ΡΡΠΎΠ²Π½Ρ WebAssembly Π±ΡΠ΄Π΅Ρ ΠΎΠ·Π½Π°ΡΠ°ΡΡ, ΡΡΠΎ WebAssembly Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΠΏΠΎΡ ΠΎΠΆ Π½Π° Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΡ ISA Π² ΡΡΠΎΠΌ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΈ ΠΈ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΡΠΈ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π±ΡΠ΄ΡΡ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΠΈΠΌΠΈ Π΄Π²ΠΎΠΈΡΠ½ΡΠΉ ΡΠ°ΠΉΠ», Π½ΠΎ ΠΏΡΠΈ ΠΎΡΠΏΡΠ°Π²ΠΊΠ΅ wasm ΡΠ²ΠΎΠΈΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠΆΠΈΠ΄Π°ΡΡ, ΡΡΠΎ ΡΠΌΠΎΠ³ΡΡ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π΅Π³ΠΎ Π½Π° Π΄ΡΡΠ³ΠΎΠΌ ΠΎΠ±ΠΎΡΡΠ΄ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈΡ Π΄Π²ΠΈΠΆΠΊΠ°Ρ . Π‘ ΡΠ»Π°Π³Π°ΠΌΠΈ, ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΌΠΈ Π±ΡΡΡΡΠΎΠΉ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠ΅, Π½Π° ΡΡΠΎΠ²Π½Π΅ WebAssembly, WebAssembly Π½Π΅ Π±ΡΠ΄Π΅Ρ Π²Π΅ΡΡΠΈ ΡΠ΅Π±Ρ ΠΊΠ°ΠΊ ISA, ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΡΠΌΠΎΠ³ΡΡ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ, ΠΎΡΠ»ΠΈΡΠ½ΡΠ΅ ΠΎΡ ΡΠ΅Ρ , Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π» ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ.
Π’Π°ΠΊΠΆΠ΅ ΡΡΠΎΠΈΡ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΠΏΡΠΎΠ΅ΠΊΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠ΅ ΡΡΠΈ ΡΠ»Π°Π³ΠΈ, ΡΠ΅Π³ΠΎΠ΄Π½Ρ Π½Π΅ ΡΠ΅ΡΡΡΡΡΡ ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π² WebAssembly. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ, Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ -fassociative-math, ΡΠ²Π»ΡΡΡΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΠΌΠΈ, ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ Π½Π° ΡΠΈΠΊΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ LLVM ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π΄ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ WebAssembly.