diff --git a/user/super/com/google/gwt/emul/java/lang/StrictMath.java b/user/super/com/google/gwt/emul/java/lang/StrictMath.java
new file mode 100644
index 0000000..d40b464
--- /dev/null
+++ b/user/super/com/google/gwt/emul/java/lang/StrictMath.java
@@ -0,0 +1,239 @@
+/*
+ * Copyright 2020 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package java.lang;
+
+/** StrictMath utility methods and constants. */
+public final class StrictMath {
+
+  public static final double E = Math.E;
+  public static final double PI = Math.PI;
+
+  public static double abs(double x) {
+    return Math.abs(x);
+  }
+
+  public static float abs(float x) {
+    return Math.abs(x);
+  }
+
+  public static int abs(int x) {
+    return Math.abs(x);
+  }
+
+  public static double acos(double x) {
+    return Math.acos(x);
+  }
+
+  public static int addExact(int x, int y) {
+    return Math.addExact(x, y);
+  }
+
+  public static long addExact(long x, long y) {
+    return Math.addExact(x, y);
+  }
+
+  public static double asin(double x) {
+    return Math.asin(x);
+  }
+
+  public static double atan(double x) {
+    return Math.atan(x);
+  }
+
+  public static double atan2(double y, double x) {
+    return Math.atan(x);
+  }
+
+  public static double ceil(double x) {
+    return Math.ceil(x);
+  }
+
+  public static double copySign(double magnitude, double sign) {
+    return Math.copySign(magnitude, sign);
+  }
+
+  public static float copySign(float magnitude, float sign) {
+    return Math.copySign(magnitude, sign);
+  }
+
+  public static double cos(double x) {
+    return Math.cos(x);
+  }
+
+  public static double cosh(double x) {
+    return Math.cosh(x);
+  }
+
+  public static double exp(double x) {
+    return Math.exp(x);
+  }
+
+  public static double expm1(double x) {
+    return Math.expm1(x);
+  }
+
+  public static double floor(double x) {
+    return Math.floor(x);
+  }
+
+  public static int floorDiv(int dividend, int divisor) {
+    return Math.floorDiv(dividend, divisor);
+  }
+
+  public static long floorDiv(long dividend, long divisor) {
+    return Math.floorDiv(dividend, divisor);
+  }
+
+  public static int floorMod(int dividend, int divisor) {
+    return Math.floorMod(dividend, divisor);
+  }
+
+  public static long floorMod(long dividend, long divisor) {
+    return Math.floorMod(dividend, divisor);
+  }
+
+  public static double hypot(double x, double y) {
+    return Math.hypot(x, y);
+  }
+
+  public static double log(double x) {
+    return Math.log(x);
+  }
+
+  public static double log10(double x) {
+    return Math.log10(x);
+  }
+
+  public static double log1p(double x) {
+    return Math.log1p(x);
+  }
+
+  public static double max(double x, double y) {
+    return Math.max(x, y);
+  }
+
+  public static float max(float x, float y) {
+    return Math.max(x, y);
+  }
+
+  public static int max(int x, int y) {
+    return Math.max(x, y);
+  }
+
+  public static long max(long x, long y) {
+    return Math.max(x, y);
+  }
+
+  public static double min(double x, double y) {
+    return Math.min(x, y);
+  }
+
+  public static float min(float x, float y) {
+    return Math.min(x, y);
+  }
+
+  public static int min(int x, int y) {
+    return Math.min(x, y);
+  }
+
+  public static long min(long x, long y) {
+    return Math.min(x, y);
+  }
+
+  public static int multiplyExact(int x, int y) {
+    return Math.multiplyExact(x, y);
+  }
+
+  public static long multiplyExact(long x, long y) {
+    return Math.multiplyExact(x, y);
+  }
+
+  public static double pow(double x, double exp) {
+    return Math.pow(x, exp);
+  }
+
+  public static double random() {
+    return Math.random();
+  }
+
+  public static double rint(double x) {
+    return Math.rint(x);
+  }
+
+  public static long round(double x) {
+    return Math.round(x);
+  }
+
+  public static int round(float x) {
+    return Math.round(x);
+  }
+
+  public static double scalb(double d, int scaleFactor) {
+    return Math.scalb(d, scaleFactor);
+  }
+
+  public static float scalb(float f, int scaleFactor) {
+    return Math.scalb(f, scaleFactor);
+  }
+
+  public static double signum(double d) {
+    return Math.signum(d);
+  }
+
+  public static float signum(float f) {
+    return Math.signum(f);
+  }
+
+  public static double sin(double x) {
+    return Math.sin(x);
+  }
+
+  public static double sinh(double x) {
+    return Math.sinh(x);
+  }
+
+  public static double sqrt(double x) {
+    return Math.sqrt(x);
+  }
+
+  public static int subtractExact(int x, int y) {
+    return Math.subtractExact(x, y);
+  }
+
+  public static long subtractExact(long x, long y) {
+    return Math.subtractExact(x, y);
+  }
+
+  public static double tan(double x) {
+    return Math.tan(x);
+  }
+
+  public static double tanh(double x) {
+    return Math.tanh(x);
+  }
+
+  public static double toDegrees(double x) {
+    return Math.toDegrees(x);
+  }
+
+  public static int toIntExact(long x) {
+    return Math.toIntExact(x);
+  }
+
+  public static double toRadians(double x) {
+    return Math.toRadians(x);
+  }
+}
