1 // Compile with: 2 // clang++ --target=wasm32-wasi fraction-norm.cc -o fraction-norm.wasm -g \ 3 // -O0 -fdebug-prefix-map=$PWD=. 4 5 struct Fraction { 6 long numerator; 7 long denominator; 8 }; 9 abs(long x)10inline long abs(long x) { return x >= 0 ? x : -x; } 11 norm(Fraction & n)12extern "C" void norm(Fraction &n) { 13 long a = abs(n.numerator), b = abs(n.denominator); 14 if (a == 0 || b == 0) 15 return; 16 do { 17 a %= b; 18 if (a == 0) 19 break; 20 b %= a; 21 } while (b > 0); 22 long gcd = a + b; 23 if (n.denominator > 0) { 24 n.numerator /= gcd; 25 n.denominator /= gcd; 26 } else { 27 n.numerator /= -gcd; 28 n.denominator /= -gcd; 29 } 30 } 31 main()32int main() { 33 Fraction c = {6, 27}; 34 norm(c); 35 return 0; 36 } 37