@@ -1583,19 +1583,18 @@ export namespace NativeMath {
15831583 }
15841584 var ux1 = ux << 1 ;
15851585 if ( ux1 <= uy1 ) {
1586- if ( ux1 == uy1 ) return 0 * x ;
1587- return x ;
1586+ return x * f64 ( ux1 != uy1 ) ;
15881587 }
15891588 if ( ! ex ) {
15901589 ex -= builtin_clz < i64 > ( ux << 12 ) ;
1591- ux <<= - ex + 1 ;
1590+ ux <<= 1 - ex ;
15921591 } else {
15931592 ux &= < u64 > - 1 >> 12 ;
15941593 ux |= 1 << 52 ;
15951594 }
15961595 if ( ! ey ) {
15971596 ey -= builtin_clz < i64 > ( uy << 12 ) ;
1598- uy <<= - ey + 1 ;
1597+ uy <<= 1 - ey ;
15991598 } else {
16001599 uy &= < u64 > - 1 >> 12 ;
16011600 uy |= 1 << 52 ;
@@ -1622,8 +1621,7 @@ export namespace NativeMath {
16221621 } else {
16231622 ux >>= - ex + 1 ;
16241623 }
1625- ux |= sx << 63 ;
1626- return reinterpret < f64 > ( ux ) ;
1624+ return reinterpret < f64 > ( ux | ( sx << 63 ) ) ;
16271625 }
16281626
16291627 export function rem ( x : f64 , y : f64 ) : f64 { // see: musl/src/math/remquo.c
@@ -1640,14 +1638,14 @@ export namespace NativeMath {
16401638 var uxi = ux ;
16411639 if ( ! ex ) {
16421640 ex -= builtin_clz < i64 > ( uxi << 12 ) ;
1643- uxi <<= - ex + 1 ;
1641+ uxi <<= 1 - ex ;
16441642 } else {
16451643 uxi &= < u64 > - 1 >> 12 ;
16461644 uxi |= 1 << 52 ;
16471645 }
16481646 if ( ! ey ) {
16491647 ey -= builtin_clz < i64 > ( uy << 12 ) ;
1650- uy <<= - ey + 1 ;
1648+ uy <<= 1 - ey ;
16511649 } else {
16521650 uy &= < u64 > - 1 >> 12 ;
16531651 uy |= 1 << 52 ;
@@ -2884,27 +2882,26 @@ export namespace NativeMathf {
28842882 var uy = reinterpret < u32 > ( y ) ;
28852883 var ex = < i32 > ( ux >> 23 & 0xFF ) ;
28862884 var ey = < i32 > ( uy >> 23 & 0xFF ) ;
2887- var sx = ux & 0x80000000 ;
2885+ var sm = ux & 0x80000000 ;
28882886 var uy1 = uy << 1 ;
28892887 if ( uy1 == 0 || ex == 0xFF || isNaN < f32 > ( y ) ) {
28902888 let m = x * y ;
28912889 return m / m ;
28922890 }
28932891 var ux1 = ux << 1 ;
28942892 if ( ux1 <= uy1 ) {
2895- if ( ux1 == uy1 ) return 0 * x ;
2896- return x ;
2893+ return x * f32 ( ux1 != uy1 ) ;
28972894 }
28982895 if ( ! ex ) {
28992896 ex -= builtin_clz < u32 > ( ux << 9 ) ;
2900- ux <<= - ex + 1 ;
2897+ ux <<= 1 - ex ;
29012898 } else {
29022899 ux &= < u32 > - 1 >> 9 ;
29032900 ux |= 1 << 23 ;
29042901 }
29052902 if ( ! ey ) {
29062903 ey -= builtin_clz < u32 > ( uy << 9 ) ;
2907- uy <<= - ey + 1 ;
2904+ uy <<= 1 - ey ;
29082905 } else {
29092906 uy &= < u32 > - 1 >> 9 ;
29102907 uy |= 1 << 23 ;
@@ -2931,8 +2928,7 @@ export namespace NativeMathf {
29312928 } else {
29322929 ux >>= - ex + 1 ;
29332930 }
2934- ux |= sx ;
2935- return reinterpret < f32 > ( ux ) ;
2931+ return reinterpret < f32 > ( ux | sm ) ;
29362932 }
29372933
29382934 export function rem ( x : f32 , y : f32 ) : f32 { // see: musl/src/math/remquof.c
@@ -2946,14 +2942,14 @@ export namespace NativeMathf {
29462942 if ( ux << 1 == 0 ) return x ;
29472943 if ( ! ex ) {
29482944 ex -= builtin_clz < u32 > ( uxi << 9 ) ;
2949- uxi <<= - ex + 1 ;
2945+ uxi <<= 1 - ex ;
29502946 } else {
29512947 uxi &= < u32 > - 1 >> 9 ;
29522948 uxi |= 1 << 23 ;
29532949 }
29542950 if ( ! ey ) {
29552951 ey -= builtin_clz < u32 > ( uy << 9 ) ;
2956- uy <<= - ey + 1 ;
2952+ uy <<= 1 - ey ;
29572953 } else {
29582954 uy &= < u32 > - 1 >> 9 ;
29592955 uy |= 1 << 23 ;
0 commit comments