diff --git a/fusl/src/math/erff.c b/fusl/src/math/erff.c
index ed5f397..13abe22 100644
--- a/fusl/src/math/erff.c
+++ b/fusl/src/math/erff.c
@@ -15,169 +15,172 @@
 
 #include "libm.h"
 
-static const float
-erx  =  8.4506291151e-01, /* 0x3f58560b */
-/*
- * Coefficients for approximation to  erf on [0,0.84375]
- */
-efx8 =  1.0270333290e+00, /* 0x3f8375d4 */
-pp0  =  1.2837916613e-01, /* 0x3e0375d4 */
-pp1  = -3.2504209876e-01, /* 0xbea66beb */
-pp2  = -2.8481749818e-02, /* 0xbce9528f */
-pp3  = -5.7702702470e-03, /* 0xbbbd1489 */
-pp4  = -2.3763017452e-05, /* 0xb7c756b1 */
-qq1  =  3.9791721106e-01, /* 0x3ecbbbce */
-qq2  =  6.5022252500e-02, /* 0x3d852a63 */
-qq3  =  5.0813062117e-03, /* 0x3ba68116 */
-qq4  =  1.3249473704e-04, /* 0x390aee49 */
-qq5  = -3.9602282413e-06, /* 0xb684e21a */
-/*
- * Coefficients for approximation to  erf  in [0.84375,1.25]
- */
-pa0  = -2.3621185683e-03, /* 0xbb1acdc6 */
-pa1  =  4.1485610604e-01, /* 0x3ed46805 */
-pa2  = -3.7220788002e-01, /* 0xbebe9208 */
-pa3  =  3.1834661961e-01, /* 0x3ea2fe54 */
-pa4  = -1.1089469492e-01, /* 0xbde31cc2 */
-pa5  =  3.5478305072e-02, /* 0x3d1151b3 */
-pa6  = -2.1663755178e-03, /* 0xbb0df9c0 */
-qa1  =  1.0642088205e-01, /* 0x3dd9f331 */
-qa2  =  5.4039794207e-01, /* 0x3f0a5785 */
-qa3  =  7.1828655899e-02, /* 0x3d931ae7 */
-qa4  =  1.2617121637e-01, /* 0x3e013307 */
-qa5  =  1.3637083583e-02, /* 0x3c5f6e13 */
-qa6  =  1.1984500103e-02, /* 0x3c445aa3 */
-/*
- * Coefficients for approximation to  erfc in [1.25,1/0.35]
- */
-ra0  = -9.8649440333e-03, /* 0xbc21a093 */
-ra1  = -6.9385856390e-01, /* 0xbf31a0b7 */
-ra2  = -1.0558626175e+01, /* 0xc128f022 */
-ra3  = -6.2375331879e+01, /* 0xc2798057 */
-ra4  = -1.6239666748e+02, /* 0xc322658c */
-ra5  = -1.8460508728e+02, /* 0xc3389ae7 */
-ra6  = -8.1287437439e+01, /* 0xc2a2932b */
-ra7  = -9.8143291473e+00, /* 0xc11d077e */
-sa1  =  1.9651271820e+01, /* 0x419d35ce */
-sa2  =  1.3765776062e+02, /* 0x4309a863 */
-sa3  =  4.3456588745e+02, /* 0x43d9486f */
-sa4  =  6.4538726807e+02, /* 0x442158c9 */
-sa5  =  4.2900814819e+02, /* 0x43d6810b */
-sa6  =  1.0863500214e+02, /* 0x42d9451f */
-sa7  =  6.5702495575e+00, /* 0x40d23f7c */
-sa8  = -6.0424413532e-02, /* 0xbd777f97 */
-/*
- * Coefficients for approximation to  erfc in [1/.35,28]
- */
-rb0  = -9.8649431020e-03, /* 0xbc21a092 */
-rb1  = -7.9928326607e-01, /* 0xbf4c9dd4 */
-rb2  = -1.7757955551e+01, /* 0xc18e104b */
-rb3  = -1.6063638306e+02, /* 0xc320a2ea */
-rb4  = -6.3756646729e+02, /* 0xc41f6441 */
-rb5  = -1.0250950928e+03, /* 0xc480230b */
-rb6  = -4.8351919556e+02, /* 0xc3f1c275 */
-sb1  =  3.0338060379e+01, /* 0x41f2b459 */
-sb2  =  3.2579251099e+02, /* 0x43a2e571 */
-sb3  =  1.5367296143e+03, /* 0x44c01759 */
-sb4  =  3.1998581543e+03, /* 0x4547fdbb */
-sb5  =  2.5530502930e+03, /* 0x451f90ce */
-sb6  =  4.7452853394e+02, /* 0x43ed43a7 */
-sb7  = -2.2440952301e+01; /* 0xc1b38712 */
+static const float erx = 8.4506291151e-01, /* 0x3f58560b */
+                                           /*
+                                            * Coefficients for approximation to  erf on [0,0.84375]
+                                            */
+    efx8 = 1.0270333290e+00,               /* 0x3f8375d4 */
+    pp0 = 1.2837916613e-01,                /* 0x3e0375d4 */
+    pp1 = -3.2504209876e-01,               /* 0xbea66beb */
+    pp2 = -2.8481749818e-02,               /* 0xbce9528f */
+    pp3 = -5.7702702470e-03,               /* 0xbbbd1489 */
+    pp4 = -2.3763017452e-05,               /* 0xb7c756b1 */
+    qq1 = 3.9791721106e-01,                /* 0x3ecbbbce */
+    qq2 = 6.5022252500e-02,                /* 0x3d852a63 */
+    qq3 = 5.0813062117e-03,                /* 0x3ba68116 */
+    qq4 = 1.3249473704e-04,                /* 0x390aee49 */
+    qq5 = -3.9602282413e-06,               /* 0xb684e21a */
+                                           /*
+                                            * Coefficients for approximation to  erf  in [0.84375,1.25]
+                                            */
+    pa0 = -2.3621185683e-03,               /* 0xbb1acdc6 */
+    pa1 = 4.1485610604e-01,                /* 0x3ed46805 */
+    pa2 = -3.7220788002e-01,               /* 0xbebe9208 */
+    pa3 = 3.1834661961e-01,                /* 0x3ea2fe54 */
+    pa4 = -1.1089469492e-01,               /* 0xbde31cc2 */
+    pa5 = 3.5478305072e-02,                /* 0x3d1151b3 */
+    pa6 = -2.1663755178e-03,               /* 0xbb0df9c0 */
+    qa1 = 1.0642088205e-01,                /* 0x3dd9f331 */
+    qa2 = 5.4039794207e-01,                /* 0x3f0a5785 */
+    qa3 = 7.1828655899e-02,                /* 0x3d931ae7 */
+    qa4 = 1.2617121637e-01,                /* 0x3e013307 */
+    qa5 = 1.3637083583e-02,                /* 0x3c5f6e13 */
+    qa6 = 1.1984500103e-02,                /* 0x3c445aa3 */
+                                           /*
+                                            * Coefficients for approximation to  erfc in [1.25,1/0.35]
+                                            */
+    ra0 = -9.8649440333e-03,               /* 0xbc21a093 */
+    ra1 = -6.9385856390e-01,               /* 0xbf31a0b7 */
+    ra2 = -1.0558626175e+01,               /* 0xc128f022 */
+    ra3 = -6.2375331879e+01,               /* 0xc2798057 */
+    ra4 = -1.6239666748e+02,               /* 0xc322658c */
+    ra5 = -1.8460508728e+02,               /* 0xc3389ae7 */
+    ra6 = -8.1287437439e+01,               /* 0xc2a2932b */
+    ra7 = -9.8143291473e+00,               /* 0xc11d077e */
+    sa1 = 1.9651271820e+01,                /* 0x419d35ce */
+    sa2 = 1.3765776062e+02,                /* 0x4309a863 */
+    sa3 = 4.3456588745e+02,                /* 0x43d9486f */
+    sa4 = 6.4538726807e+02,                /* 0x442158c9 */
+    sa5 = 4.2900814819e+02,                /* 0x43d6810b */
+    sa6 = 1.0863500214e+02,                /* 0x42d9451f */
+    sa7 = 6.5702495575e+00,                /* 0x40d23f7c */
+    sa8 = -6.0424413532e-02,               /* 0xbd777f97 */
+                                           /*
+                                            * Coefficients for approximation to  erfc in [1/.35,28]
+                                            */
+    rb0 = -9.8649431020e-03,               /* 0xbc21a092 */
+    rb1 = -7.9928326607e-01,               /* 0xbf4c9dd4 */
+    rb2 = -1.7757955551e+01,               /* 0xc18e104b */
+    rb3 = -1.6063638306e+02,               /* 0xc320a2ea */
+    rb4 = -6.3756646729e+02,               /* 0xc41f6441 */
+    rb5 = -1.0250950928e+03,               /* 0xc480230b */
+    rb6 = -4.8351919556e+02,               /* 0xc3f1c275 */
+    sb1 = 3.0338060379e+01,                /* 0x41f2b459 */
+    sb2 = 3.2579251099e+02,                /* 0x43a2e571 */
+    sb3 = 1.5367296143e+03,                /* 0x44c01759 */
+    sb4 = 3.1998581543e+03,                /* 0x4547fdbb */
+    sb5 = 2.5530502930e+03,                /* 0x451f90ce */
+    sb6 = 4.7452853394e+02,                /* 0x43ed43a7 */
+    sb7 = -2.2440952301e+01;               /* 0xc1b38712 */
 
-static float erfc1(float x)
-{
-	float_t s,P,Q;
+static float erfc1(float x) {
+  float_t s, P, Q;
 
-	s = fabsf(x) - 1;
-	P = pa0+s*(pa1+s*(pa2+s*(pa3+s*(pa4+s*(pa5+s*pa6)))));
-	Q = 1+s*(qa1+s*(qa2+s*(qa3+s*(qa4+s*(qa5+s*qa6)))));
-	return 1 - erx - P/Q;
+  s = fabsf(x) - 1;
+  P = pa0 + s * (pa1 + s * (pa2 + s * (pa3 + s * (pa4 + s * (pa5 + s * pa6)))));
+  Q = 1 + s * (qa1 + s * (qa2 + s * (qa3 + s * (qa4 + s * (qa5 + s * qa6)))));
+  return 1 - erx - P / Q;
 }
 
-static float erfc2(uint32_t ix, float x)
-{
-	float_t s,R,S;
-	float z;
+static float erfc2(uint32_t ix, float x) {
+  float_t s, R, S;
+  float z;
 
-	if (ix < 0x3fa00000)  /* |x| < 1.25 */
-		return erfc1(x);
+  if (ix < 0x3fa00000) /* |x| < 1.25 */
+    return erfc1(x);
 
-	x = fabsf(x);
-	s = 1/(x*x);
-	if (ix < 0x4036db6d) {   /* |x| < 1/0.35 */
-		R = ra0+s*(ra1+s*(ra2+s*(ra3+s*(ra4+s*(
-		     ra5+s*(ra6+s*ra7))))));
-		S = 1.0f+s*(sa1+s*(sa2+s*(sa3+s*(sa4+s*(
-		     sa5+s*(sa6+s*(sa7+s*sa8)))))));
-	} else {                 /* |x| >= 1/0.35 */
-		R = rb0+s*(rb1+s*(rb2+s*(rb3+s*(rb4+s*(
-		     rb5+s*rb6)))));
-		S = 1.0f+s*(sb1+s*(sb2+s*(sb3+s*(sb4+s*(
-		     sb5+s*(sb6+s*sb7))))));
-	}
-	GET_FLOAT_WORD(ix, x);
-	SET_FLOAT_WORD(z, ix&0xffffe000);
-	return expf(-z*z - 0.5625f) * expf((z-x)*(z+x) + R/S)/x;
+  x = fabsf(x);
+  s = 1 / (x * x);
+  if (ix < 0x4036db6d) { /* |x| < 1/0.35 */
+    R = ra0 +
+        s * (ra1 +
+             s * (ra2 +
+                  s * (ra3 + s * (ra4 + s * (ra5 + s * (ra6 + s * ra7))))));
+    S = 1.0f +
+        s * (sa1 +
+             s * (sa2 +
+                  s * (sa3 +
+                       s * (sa4 +
+                            s * (sa5 + s * (sa6 + s * (sa7 + s * sa8)))))));
+  } else { /* |x| >= 1/0.35 */
+    R = rb0 +
+        s * (rb1 + s * (rb2 + s * (rb3 + s * (rb4 + s * (rb5 + s * rb6)))));
+    S = 1.0f +
+        s * (sb1 +
+             s * (sb2 +
+                  s * (sb3 + s * (sb4 + s * (sb5 + s * (sb6 + s * sb7))))));
+  }
+  GET_FLOAT_WORD(ix, x);
+  SET_FLOAT_WORD(z, ix & 0xffffe000);
+  return expf(-z * z - 0.5625f) * expf((z - x) * (z + x) + R / S) / x;
 }
 
-float erff(float x)
-{
-	float r,s,z,y;
-	uint32_t ix;
-	int sign;
+float erff(float x) {
+  float r, s, z, y;
+  uint32_t ix;
+  int sign;
 
-	GET_FLOAT_WORD(ix, x);
-	sign = ix>>31;
-	ix &= 0x7fffffff;
-	if (ix >= 0x7f800000) {
-		/* erf(nan)=nan, erf(+-inf)=+-1 */
-		return 1-2*sign + 1/x;
-	}
-	if (ix < 0x3f580000) {  /* |x| < 0.84375 */
-		if (ix < 0x31800000) {  /* |x| < 2**-28 */
-			/*avoid underflow */
-			return 0.125f*(8*x + efx8*x);
-		}
-		z = x*x;
-		r = pp0+z*(pp1+z*(pp2+z*(pp3+z*pp4)));
-		s = 1+z*(qq1+z*(qq2+z*(qq3+z*(qq4+z*qq5))));
-		y = r/s;
-		return x + x*y;
-	}
-	if (ix < 0x40c00000)  /* |x| < 6 */
-		y = 1 - erfc2(ix,x);
-	else
-		y = 1 - 0x1p-120f;
-	return sign ? -y : y;
+  GET_FLOAT_WORD(ix, x);
+  sign = ix >> 31;
+  ix &= 0x7fffffff;
+  if (ix >= 0x7f800000) {
+    /* erf(nan)=nan, erf(+-inf)=+-1 */
+    return 1 - 2 * sign + 1 / x;
+  }
+  if (ix < 0x3f580000) {   /* |x| < 0.84375 */
+    if (ix < 0x31800000) { /* |x| < 2**-28 */
+      /*avoid underflow */
+      return 0.125f * (8 * x + efx8 * x);
+    }
+    z = x * x;
+    r = pp0 + z * (pp1 + z * (pp2 + z * (pp3 + z * pp4)));
+    s = 1 + z * (qq1 + z * (qq2 + z * (qq3 + z * (qq4 + z * qq5))));
+    y = r / s;
+    return x + x * y;
+  }
+  if (ix < 0x40c00000) /* |x| < 6 */
+    y = 1 - erfc2(ix, x);
+  else
+    y = 1 - 0x1p-120f;
+  return sign ? -y : y;
 }
 
-float erfcf(float x)
-{
-	float r,s,z,y;
-	uint32_t ix;
-	int sign;
+float erfcf(float x) {
+  float r, s, z, y;
+  uint32_t ix;
+  int sign;
 
-	GET_FLOAT_WORD(ix, x);
-	sign = ix>>31;
-	ix &= 0x7fffffff;
-	if (ix >= 0x7f800000) {
-		/* erfc(nan)=nan, erfc(+-inf)=0,2 */
-		return 2*sign + 1/x;
-	}
+  GET_FLOAT_WORD(ix, x);
+  sign = ix >> 31;
+  ix &= 0x7fffffff;
+  if (ix >= 0x7f800000) {
+    /* erfc(nan)=nan, erfc(+-inf)=0,2 */
+    return 2 * sign + 1 / x;
+  }
 
-	if (ix < 0x3f580000) {  /* |x| < 0.84375 */
-		if (ix < 0x23800000)  /* |x| < 2**-56 */
-			return 1.0f - x;
-		z = x*x;
-		r = pp0+z*(pp1+z*(pp2+z*(pp3+z*pp4)));
-		s = 1.0f+z*(qq1+z*(qq2+z*(qq3+z*(qq4+z*qq5))));
-		y = r/s;
-		if (sign || ix < 0x3e800000)  /* x < 1/4 */
-			return 1.0f - (x+x*y);
-		return 0.5f - (x - 0.5f + x*y);
-	}
-	if (ix < 0x41e00000) {  /* |x| < 28 */
-		return sign ? 2 - erfc2(ix,x) : erfc2(ix,x);
-	}
-	return sign ? 2 - 0x1p-120f : 0x1p-120f*0x1p-120f;
+  if (ix < 0x3f580000) { /* |x| < 0.84375 */
+    if (ix < 0x23800000) /* |x| < 2**-56 */
+      return 1.0f - x;
+    z = x * x;
+    r = pp0 + z * (pp1 + z * (pp2 + z * (pp3 + z * pp4)));
+    s = 1.0f + z * (qq1 + z * (qq2 + z * (qq3 + z * (qq4 + z * qq5))));
+    y = r / s;
+    if (sign || ix < 0x3e800000) /* x < 1/4 */
+      return 1.0f - (x + x * y);
+    return 0.5f - (x - 0.5f + x * y);
+  }
+  if (ix < 0x41e00000) { /* |x| < 28 */
+    return sign ? 2 - erfc2(ix, x) : erfc2(ix, x);
+  }
+  return sign ? 2 - 0x1p-120f : 0x1p-120f * 0x1p-120f;
 }
