diff --git a/src/hb-cff-interp-common.hh b/src/hb-cff-interp-common.hh
index 1d1f10f..ec81d62 100644
--- a/src/hb-cff-interp-common.hh
+++ b/src/hb-cff-interp-common.hh
@@ -222,14 +222,14 @@
   void set_int (int v)       { value = v; }
   int to_int () const        { return value; }
 
-  void set_fixed (int32_t v) { value = v / 65536.0; }
-  int32_t to_fixed () const  { return value * 65536.0; }
+  void set_fixed (int32_t v) { value = v / 65536.0f; }
+  int32_t to_fixed () const  { return value * 65536.0f; }
 
-  void set_real (double v)   { value = v; }
-  double to_real () const    { return value; }
+  void set_real (float v)   { value = v; }
+  float to_real () const    { return value; }
 
   bool in_int_range () const
-  { return ((double) (int16_t) to_int () == value); }
+  { return ((float) (int16_t) to_int () == value); }
 
   bool operator >  (const number_t &n) const { return value > n.to_real (); }
   bool operator <  (const number_t &n) const { return n > *this; }
@@ -244,7 +244,7 @@
   }
 
   protected:
-  double value = 0.;
+  float value = 0.;
 };
 
 /* byte string */
@@ -439,7 +439,7 @@
     n.set_fixed (v);
   }
 
-  void push_real (double v)
+  void push_real (float v)
   {
     ARG &n = S::push ();
     n.set_real (v);
diff --git a/src/hb-cff-interp-dict-common.hh b/src/hb-cff-interp-dict-common.hh
index 53226b2..9642b1e 100644
--- a/src/hb-cff-interp-dict-common.hh
+++ b/src/hb-cff-interp-dict-common.hh
@@ -78,7 +78,7 @@
   }
 
   /* Turns CFF's BCD format into strtod understandable string */
-  static double parse_bcd (byte_str_ref_t& str_ref)
+  static float parse_bcd (byte_str_ref_t& str_ref)
   {
     if (unlikely (str_ref.in_error ())) return .0;
 
@@ -107,7 +107,7 @@
 	double pv;
 	if (unlikely (!hb_parse_double (&p, p + count, &pv, true/* whole buffer */)))
 	  break;
-	return pv;
+	return (float) pv;
       }
       else
       {
diff --git a/src/hb-cff2-interp-cs.hh b/src/hb-cff2-interp-cs.hh
index 915b10c..c76d45e 100644
--- a/src/hb-cff2-interp-cs.hh
+++ b/src/hb-cff2-interp-cs.hh
@@ -37,7 +37,7 @@
 {
   void set_int (int v) { reset_blends (); number_t::set_int (v); }
   void set_fixed (int32_t v) { reset_blends (); number_t::set_fixed (v); }
-  void set_real (double v) { reset_blends (); number_t::set_real (v); }
+  void set_real (float v) { reset_blends (); number_t::set_real (v); }
 
   void set_blends (unsigned int numValues_, unsigned int valueIndex_,
 		   hb_array_t<const blend_arg_t> blends_)
@@ -148,16 +148,16 @@
   void	 set_ivs (unsigned int ivs_) { ivs = ivs_; }
   bool	 seen_vsindex () const { return seen_vsindex_; }
 
-  double blend_deltas (hb_array_t<const ELEM> deltas) const
+  float blend_deltas (hb_array_t<const ELEM> deltas) const
   {
-    double v = 0;
+    float v = 0;
     if (do_blend)
     {
       if (likely (scalars.length == deltas.length))
       {
         unsigned count = scalars.length;
 	for (unsigned i = 0; i < count; i++)
-	  v += (double) scalars.arrayZ[i] * deltas.arrayZ[i].to_real ();
+	  v += (float) scalars.arrayZ[i] * deltas.arrayZ[i].to_real ();
       }
     }
     return v;
diff --git a/src/hb-subset-cff2.cc b/src/hb-subset-cff2.cc
index 3c52fb9..32aefcc 100644
--- a/src/hb-subset-cff2.cc
+++ b/src/hb-subset-cff2.cc
@@ -266,14 +266,14 @@
     }
   }
 
-  double blend_deltas (hb_array_t<const number_t> deltas) const
+  float blend_deltas (hb_array_t<const number_t> deltas) const
   {
-    double v = 0;
+    float v = 0;
     if (likely (scalars.length == deltas.length))
     {
       unsigned count = scalars.length;
       for (unsigned i = 0; i < count; i++)
-	v += (double) scalars.arrayZ[i] * deltas.arrayZ[i].to_real ();
+	v += (float) scalars.arrayZ[i] * deltas.arrayZ[i].to_real ();
     }
     return v;
   }
