diff --git a/spec/std/float_spec.cr b/spec/std/float_spec.cr
index 1695473c5ffbd7bea33cd5c2ab413904fb32d44d..5060683508ea1117a43f2f25b78c261b2d725314 100755
--- a/spec/std/float_spec.cr
+++ b/spec/std/float_spec.cr
@@ -39,6 +39,16 @@ describe "Float" do
     end
   end
 
+  describe "hash" do
+    it "does for Float32" do
+      1.2_f32.hash.should_not eq(0)
+    end
+
+    it "does for Float64" do
+      1.2.hash.should_not eq(0)
+    end
+  end
+
   it "casts" do
     Float32.cast(1_f64).is_a?(Float32).should be_true
     Float32.cast(1_f64).should eq(1)
diff --git a/src/float.cr b/src/float.cr
index 5076bb93e22900239321e811063078a7be848f6c..f614149b7c2b46fdd0cf656d99b9e902822f2971 100644
--- a/src/float.cr
+++ b/src/float.cr
@@ -46,6 +46,11 @@ struct Float32
     to_f64.to_s(io)
   end
 
+  def hash
+    n = self
+    (pointerof(n) as Int32*).value
+  end
+
   def self.cast(value)
     value.to_f32
   end
@@ -87,6 +92,11 @@ struct Float64
     io.write(chars.to_slice, C.strlen(chars.buffer))
   end
 
+  def hash
+    n = self
+    (pointerof(n) as Int64*).value
+  end
+
   def self.cast(value)
     value.to_f64
   end