(νμ¬ μΉνΈνλ κ²μ΄ μλλλ€. μ΄λ μ 보μ μ κ°ν κ²°μ μ λ΄λ¦¬κ³ κ·Όκ±°λ₯Ό μν μλ£λ₯Ό μμ§νκΈ° μν κ²μ λλ€.)
Nondeterminism.md λ₯Ό 보면 NaN λΉνΈ λΆλΆμ΄ λμ λλλ€. λ¬Όλ‘ μ€λ λκ° κ²½μν μ μκ³ λ¦¬μμ€κ° κ³ κ°λ μ μμΌλ©° κΈ°λ₯μ΄ μΆκ°λ μ μμ΅λλ€. μ΄λ μ 체 λμμΈμ κ²°κ³Όμ λλ€. νμ§λ§ NaN λΉνΈ? VMμ΄ μ’ λ μ리νκ³ μ΄λ₯Ό μ²λ¦¬ν μ μμκΉμ? λ κ°μ§ λ¬Έμ κ° μμ΅λλ€.
IEEE 754λ μ΄κ²μ μ§μ νμ§ μμ μ±λ‘ λμ§λ§ μ΅μν x86, ARM λ° Powerλ λͺ¨λ "첫 λ²μ§Έ" νΌμ°μ°μλ₯Ό μ ννκ³ ν©λ¦¬μ μΈ μ νμ λλ€.
κ·Έλ¬λ wasm μμ€μμ μ ν μ¬νμ μμ νλ©΄ wasm ꡬνμ΄ λΆλ μμμ λ§μ λ° κ³±μ μ ν΅κ·Όν μ μμμ μλ―Έν©λλ€. μ΄λ λͺ λ Ήμ΄κ° μ λ ₯ μ€ νλλ₯Ό λ°©ν΄νλ pre-VEX x86μμ μ μ©ν μ΅μ νμ λλ€. λν LLVM κΈ°λ° VMμ μ¬μ©νλ μ¬λμ λꡬλ wasmμμ λνκΈ°μ κ³±νκΈ°κ° κ°νμ±μ΄ μλ€λ κ²μ κ°λ₯΄μ³μΌ ν©λλ€.
λκ΅°κ°λ μ΄κ²μ΄ μΌ μ€ν νΌκ° μλλΌκ³ ν©λ¦¬μ μΌλ‘ μ£Όμ₯ν μ μμΌλ―λ‘ μ΄ λ¬Έμ λ κ°ν μκ΅¬κ° μμΌλ©΄ μ΄λ‘ μ μΌλ‘ κ³ μΉ μ μμ΅λλ€.
x86μ 1μ μ¬μ©νκ³ ARMμ 0μ μ¬μ©ν©λλ€.
μ΄ λ¬Έμ λ₯Ό ν΄κ²°νλ κ°μ₯ κ°λ¨ν λ°©λ²μ λͺ¨λ λΆλ μμμ μ°μ° νμ μ κ·ννλ κ²μ λλ€. μ΄κ²μ μνν μ μμ§λ§ μ νν NaN νΌμ°μ°μκ° μμ λ 0κ³Ό 1μ΄ λͺ¨λ μ ν¨ν κ°μΌ μ μμΌλ―λ‘ NaN κ²°κ³Όλ₯Ό νμΈνκ³ μ κ·ννλ κ²λ§μΌλ‘λ μΆ©λΆνμ§ μμ΅λλ€. NaN κ²°κ³Όμ NaN νΌμ°μ°μκ° μλμ§ νμΈν λ€μ μ κ·νν΄μΌ ν©λλ€.
_λͺ¨λ _ μμ νμ μ κ·ννλ κ²μ λ§€μ° λΉμ©μ΄ λ§μ΄ λλλ€. λ λ€λ₯Έ μ΅μ μ κ³μ°μ "μ΄μ€μΌμ΄ν" μ§μ μμ μ κ·ννλ κ²μ λλ€(μ κ·ν κ²½λ‘λ κΈ°λ³Έμ μΌλ‘ μ¬λ°λ₯Έ NaN μΆλ ₯μ κ²°μ νκΈ° μν΄ μ 체 κ³μ° μ€νΈλ¦Όμ μ¬μν΄μΌ ν¨). μ΄κ²μ κ°μ μ¬νμ΄μ§λ§ μ¬μ ν μλΉν μ€λ²ν€λλ₯Ό μΆκ°ν μ μμ΅λλ€.
λ λ€λ₯Έ κ°λ₯ν ꡬνμ μλͺ»λ μμΈμ λ§μ€ν¬λ₯Ό ν΄μ νκ³ NaNμ΄ μμ±λ λλ§λ€ νΈλ©μ μνν λ€μ μ κ·ν λ° λ°νμ μννλ κ²μ λλ€. λ¨μ μ κΈ°λ³Έμ΄ μλ CPU λͺ¨λλ₯Ό μ¬μ©νκ³ μ ν¨νμ§ μμ νλͺ©μ΄ λ§μ΄ μμ±λλ κ²½μ° λ§€μ° λ립λλ€.
λΆννλ μ΄λ¬ν μ κ·Ό λ°©μμλ μ¬κ°ν λ¨μ μ΄ μμ΅λλ€. λ€λ₯Έ μμ΄λμ΄κ° λ μ€λ₯΄μ§ μκ±°λ λ§€μ° κ°ν μκ΅¬κ° μμΌλ©΄ ν΄κ²°νκΈ° μ΄λ €μΈ κ² κ°μ΅λλ€.
μ£Όλͺ©ν΄μΌ ν λ λ€λ₯Έ μ¬νμ NaN λΉνΈλ μ€μλ‘ κ΄μ°°νκΈ° μ΄λ ΅κΈ° λλ¬Έμ μΌλ°μ μΌλ‘ μ£Όμ μ΄μμ± λ¬Έμ κ° μλλΌλ κ²μ λλ€.
λ€λ₯Έ μ¬λμ΄ μΆκ°ν μκ°μ΄ μμ΅λκΉ?
μ£Όλͺ©ν΄μΌ ν λ λ€λ₯Έ μ¬νμ NaN λΉνΈκ° μ€μλ‘ κ΄μ°°νκΈ° μ΄λ ΅λ€λ κ²μ λλ€.
κ·Έκ²λ€μ κ΄μ°°νκ±°λ μ΅μν λΆνΈ λΉνΈλ₯Ό κ΄μ°°ν μ μλλ‘ νλ λ°©λ²μ΄ μμ΅λκΉ?
IMO NaN λΉκ²°μ λ‘ μ μννΈμ¨μ΄κ° μ΄λ₯Ό μ κ²½ μ°λ κ²½μ°κ° λ§€μ° λλ¬ΌκΈ° λλ¬Έμ κ·Έλλ‘ λμ΄μΌ ν©λλ€. μ±λ₯μ κ²°μ μ μΌλ‘ λ§λ€κΈ° μν΄ ν¬μνλ κ²½μ°λ 무μμ λκΉ?
λ€μμ NaN λΉνΈλ₯Ό κ΄μ°°ν μ μλ λ°©λ²μ λͺ©λ‘μ λλ€.
reinterpret
μ νstore
λ₯Ό μ ν λ©λͺ¨λ¦¬μ μ μ₯νκ³ λ€λ₯Έ ν΄μμΌλ‘ λΉνΈλ₯Ό λ‘λν©λλ€(λλ μΈλΆμμ λΉνΈλ₯Ό κ΄μ°°νλλ‘ ν¨).call
μ μΈμλ₯Ό μ λ¬νκ±°λ λ΄λ³΄λΈ ν¨μμμ κ°μ λ°νν©λλ€.copysign
λΉ NaNμ λν λΆνΈ λΉνΈVMμ μ΄λ€ κ°κ° μμ μ κ·ν μ½λλ₯Ό μ½μ
ν μ μμ΅λλ€. κ·Έκ²μ΄ μμμ λ
Όμν "μ΄μ€μΌμ΄ν ν¬μΈνΈμμ μ κ·ν" μμ΄λμ΄μ
λλ€. store
λ ν« κ²½λ‘μμ λ§€μ° μΌλ°μ μ΄λ―λ‘ μ¬μ ν μλΉν λΉμλλ€.
@qwertie μ λ κ·Έκ²λ€μ λν΄ λ§€μ° κ΄μ¬μ κ°κ³ μ¬κΈ°μμ λ Όμλ κ²μ²λΌ μ¬μμ ν¬ν¨λμ§ μλλΌλ μμ ν κ²°μ μ μΌλ‘ λ§λλ λ°©λ²μ΄ μμ΅λλ€.
@qwertie μ΄μ μλ μ½κ° λ ν° μ΄μμ±(μ: IEEE 754 totalOrder ν¨μλ₯Ό νλͺ νμ§ μκ² μ¬μ©νλ μ½λκ° μΈμμ μ‘΄μ¬ν¨), μ½κ° λ λμ μ¬νμ±, μ¬λ¬ λ Έλμμ λμΉ κ³μ°μ μνν λ λ κ°ν λΆλ³μ±μ΄ ν¬ν¨λ μ μμ΅λλ€.
store
λ ν« κ²½λ‘μμ λ§€μ° μΌλ°μ μ΄λ―λ‘ μ¬μ ν μλΉν λΉμλλ€.
μ΄ κ²½μ° νμ λΆνΈ κ°μ μ§μ ν μ μμ΅λκΉ? κ·Έλμ memμ λ°°μΉλλ©΄ 1λ‘ λ§λμκ² μ΅λκΉ?
@wanderer μ΄κ²μ΄ λ³Έμ§μ μΌλ‘ μ κ·νκ° μλ°λλ κ²μ λλ€. κ°μ΄ NaNμΈμ§ νμΈνκ³ , κ·Έλ λ€λ©΄ μ½κ°μ μμ μ μ μ©ν©λλ€. μΌλ°μ μΌλ‘ ν« κ²½λ‘μ μΆκ° λΉκ΅ λ° ββλΆκΈ°μ λλ€.
λν μ΄ λ¬Έμ μμ μΈκΈν μ΅μ μ λ²€μΉλ§νΉνμ§ μμμ΅λλ€. μ¬κΈ°μ μΆκ°ν μ μλ λͺ¨λ λ²€μΉλ§νΉμ νμν©λλ€.
λλ μ±λ₯μ μ νΈνλ νμ¬ μμ€μ λΉκ²°μ λ‘ μ κ°νκ² κΈ°λ κ²μ
λλ€.
λλ μ€μ λ‘ wasκ° NaNμ κ°μ λΉνΈλ₯Ό μ격νκ² μ μνλ€λ μ¬μ€μ λ€μ λλμ΅λλ€.
μ΄κ²μ΄ μ€λλ μ νλ‘μΈμμ μΆ©λΆν μ μμ§λ§ λ―Έλμ νλ‘μΈμκ° λ¬΄μμΈμ§ λκ° μ μ μμ΅λκΉ?
wasmμ΄ κ³ κΈ μΈμ΄μμ μμ±λλ κ²½μ° ν΄λΉ λ²μκΈ°λ μλ₯Ό λ€μ΄ -ffast-mathμ μ μ¬ν FP μλ―Έ 체κ³μ μμ€μ μ μ΄νλ ββμ΅μ μ μ 곡ν μ μμ΅λλ€. κ·Έλ° λ€μ λ²μκ°λ nanμ μνλ νμμΌλ‘ κ°μ λ³ννλ λ° νμν μΆκ° wasm μμ μ μ½μ ν μ μμ΅λλ€. κ·Έ λͺ©μ μ μν΄ μ°λ¦¬λ isNan λλ normalizeNan μ°μ°μλ₯Ό μ 곡ν μ μμ§λ§, μ§κΈμ μ΄κ²μ μΉνΈνμ§ μμ΅λλ€.
μ컨λ, μ΄κ²μ "μμ "νλ κ²μ λ λμ μμ€μ λκ΅¬μΈ IMOμ 맑기λ κ²μ΄ κ°μ₯ μ’μ΅λλ€.
+1 @mbodart. νΈμ§ : μ€, μ€μ λ‘ +1 λ¬Όκ±΄μ΄ μμ΅λλ€. :). Btw, λλ κ°μΈμ μΌλ‘ Wasm = μΈκ³ μ§λ°°λΌκ³ μκ°νλ©° λ°λΌμ λ―Έλμ νλ‘μΈμλ κ·Έκ²μ μ λμνμ§ μμ κ²μ λλ€.
κ²°μ μ λ΄λ¦¬κΈ° μ μ μ΄κ²μ μ±λ₯ ν¨κ³Όλ₯Ό μ λννκ³ μΆμ΅λλ€. λλ μ°λ¦¬μ ν΄μ²΄μΈμ΄ νμ¬λ‘μλ μ’μ μ±λ₯ μΈ‘μ μ νκΈ°μλ μμ§ λ―Έμ±μνλ€κ³ μκ°ν©λλ€. λ€λ₯Έ λ§λ‘ νμλ©΄, λλ "μ²μκ΅μ μν μ£½μ"μ νΌνκ³ μΆμ΅λλ€.
@jfbastienμ λμν©λλ€. μλ―Έλ‘ μ μμ νκΈ° μ μ μ±λ₯ ν¨κ³Όλ₯Ό λ¨Όμ μλνν΄μΌ ν©λλ€.
λΆλͺ ν λ§μλ리μλ©΄, μ λ νμ¬ μ¬κΈ°μμ λ³νλ₯Ό μΉνΈνλ κ²μ΄ μλλλ€. κ·Όκ±°μλ£λ₯Ό μμ§νκ³ μμ΅λλ€. NaN λΉνΈ λΉκ²°μ λ‘ μ΄ νμ΄λμ μ€λͺ μ μν©λλ€. κ·Έλ¦¬κ³ λ΄κ° μλ ν μ무λ μ΄λ¬ν λΉνΈλ₯Ό λΉκ²°μ μ μΌλ‘ λ§λλ μ±λ₯ ν¨κ³Όλ₯Ό μ λννμ§ μμμ΅λλ€.
ARMv8μ λ νΌμ°μ°μκ° λͺ¨λ NaNμΈ κ²½μ° μ²« λ²μ§Έ νΌμ°μ°μλ₯Ό νμ μ ννμ§λ μμ΅λλ€. κ·μΉμ λ€μκ³Ό κ°μ΅λλ€.
μ¬μμ μ½λ λμ μ΄κ²μ ARMv8μ Aarch32 λ° Aarch64 λͺ¨λ λͺ¨λμ μ μ©λ©λλ€.
μ΄ λμμ λ κ²½μ° λͺ¨λμμ 첫 λ²μ§Έ νΌμ°μ°μλ₯Ό μ ννλ SSEμ λ€λ¦ λλ€.
λ μν€ν μ² λͺ¨λ μ ννκΈ° μ μ μ‘°μ©ν λΉνΈλ₯Ό μ€μ νμ¬ sNaNμ qNaNμΌλ‘ λ³νν©λλ€.
@stoklund μ’μ μ리! ARMμ΄ μ²« λ²μ§Έ NaNμ μ ννλ κ²μ λ λ²μ§Έ NaNμ΄ μ νΈλ₯Ό 보λ΄λ κ²½μ°μ λ°μνμ§ μλλ€λ κ²μ λμ³€μ΅λλ€. μ΄λ μμ λ€μ€ NaN μ¬λ‘μ λν΄ λ΄κ° μ μν μ λ΅μ 볡μ‘νκ² λ§λ€ μ μμΌλ―λ‘ κ·Όκ±°μμ μ΄λ₯Ό μΈκΈν μ μμ΅λλ€.
μ΄μ μμ λ΄μ©μ μμ½ν νΉμ ν μ€νΈλ₯Ό μ μνκΈ° μν΄ #973μ λ§λ€μμ΅λλ€.
κ°μ₯ μ μ©ν λκΈ
κ²°μ μ λ΄λ¦¬κΈ° μ μ μ΄κ²μ μ±λ₯ ν¨κ³Όλ₯Ό μ λννκ³ μΆμ΅λλ€. λλ μ°λ¦¬μ ν΄μ²΄μΈμ΄ νμ¬λ‘μλ μ’μ μ±λ₯ μΈ‘μ μ νκΈ°μλ μμ§ λ―Έμ±μνλ€κ³ μκ°ν©λλ€. λ€λ₯Έ λ§λ‘ νμλ©΄, λλ "μ²μκ΅μ μν μ£½μ"μ νΌνκ³ μΆμ΅λλ€.