[Groonga-commit] groonga/grnxx at c094255 [new_data_types] Redefine Float::min() and add Float::normal/subnormal_min(). (#101)

Back to archive index

susumu.yata null+****@clear*****
Thu Nov 6 17:19:46 JST 2014


susumu.yata	2014-11-06 17:19:46 +0900 (Thu, 06 Nov 2014)

  New Revision: c094255e6ab46300ed390b258602dbe452187370
  https://github.com/groonga/grnxx/commit/c094255e6ab46300ed390b258602dbe452187370

  Message:
    Redefine Float::min() and add Float::normal/subnormal_min(). (#101)

  Modified files:
    include/grnxx/data_types/scalar/float.hpp
    test/test_data_types.cpp

  Modified: include/grnxx/data_types/scalar/float.hpp (+13 -1)
===================================================================
--- include/grnxx/data_types/scalar/float.hpp    2014-11-06 16:53:00 +0900 (659b9ed)
+++ include/grnxx/data_types/scalar/float.hpp    2014-11-06 17:19:46 +0900 (b856764)
@@ -128,6 +128,12 @@ class Float {
   static constexpr Float max() {
     return Float(max_value());
   }
+  static constexpr Float normal_min() {
+    return Float(normal_min_value());
+  }
+  static constexpr Float subnormal_min() {
+    return Float(subnormal_min_value());
+  }
   static constexpr Float infinity() {
     return Float(infinity_value());
   }
@@ -136,11 +142,17 @@ class Float {
   }
 
   static constexpr double min_value() {
-    return std::numeric_limits<double>::min();
+    return std::numeric_limits<double>::lowest();
   }
   static constexpr double max_value() {
     return std::numeric_limits<double>::max();
   }
+  static constexpr double normal_min_value() {
+    return std::numeric_limits<double>::min();
+  }
+  static constexpr double subnormal_min_value() {
+    return std::numeric_limits<double>::denorm_min();
+  }
   static constexpr double infinity_value() {
     return std::numeric_limits<double>::infinity();
   }

  Modified: test/test_data_types.cpp (+13 -5)
===================================================================
--- test/test_data_types.cpp    2014-11-06 16:53:00 +0900 (9112699)
+++ test/test_data_types.cpp    2014-11-06 17:19:46 +0900 (32eb411)
@@ -459,12 +459,19 @@ void test_float() {
   assert(grnxx::Float(0.0).type() == grnxx::FLOAT_DATA);
   assert(grnxx::Float::min().type() == grnxx::FLOAT_DATA);
   assert(grnxx::Float::max().type() == grnxx::FLOAT_DATA);
+  assert(grnxx::Float::normal_min().type() == grnxx::FLOAT_DATA);
+  assert(grnxx::Float::subnormal_min().type() == grnxx::FLOAT_DATA);
+  assert(grnxx::Float::max().type() == grnxx::FLOAT_DATA);
   assert(grnxx::Float::infinity().type() == grnxx::FLOAT_DATA);
   assert(grnxx::Float::na().type() == grnxx::FLOAT_DATA);
 
   assert(grnxx::Float(0.0).value() == 0.0);
   assert(grnxx::Float::min().value() == grnxx::Float::min_value());
   assert(grnxx::Float::max().value() == grnxx::Float::max_value());
+  assert(grnxx::Float::normal_min().value() ==
+         grnxx::Float::normal_min_value());
+  assert(grnxx::Float::subnormal_min().value() ==
+         grnxx::Float::subnormal_min_value());
   assert(grnxx::Float::infinity().value() == grnxx::Float::infinity_value());
   assert(std::isnan(grnxx::Float::na().value()));
 
@@ -507,8 +514,8 @@ void test_float() {
 
   assert(-grnxx::Float(0.0) == grnxx::Float(0.0));
   assert(-grnxx::Float(1.0) == grnxx::Float(-1.0));
-  assert(-grnxx::Float::min() == grnxx::Float(-grnxx::Float::min_value()));
-  assert(-grnxx::Float::max() == grnxx::Float(-grnxx::Float::max_value()));
+  assert(-grnxx::Float::min() == grnxx::Float::max());
+  assert(-grnxx::Float::max() == grnxx::Float::min());
   assert(-grnxx::Float::infinity() ==
          grnxx::Float(-grnxx::Float::infinity_value()));
   assert((-grnxx::Float::na()).is_na());
@@ -523,7 +530,7 @@ void test_float() {
 
   assert((grnxx::Float(1.0) - grnxx::Float(1.0)) == grnxx::Float(0.0));
   assert((grnxx::Float::max() - -grnxx::Float::max()).is_infinite());
-  assert((grnxx::Float::infinity() - grnxx::Float::min()).is_infinite());
+  assert((grnxx::Float::infinity() - grnxx::Float::max()).is_infinite());
   assert((grnxx::Float::infinity() - grnxx::Float::infinity()).is_na());
   assert((grnxx::Float(1.0) - grnxx::Float::na()).is_na());
   assert((grnxx::Float::na() - grnxx::Float(1.0)).is_na());
@@ -531,7 +538,8 @@ void test_float() {
 
   assert((grnxx::Float(2.0) * grnxx::Float(0.5)) == grnxx::Float(1.0));
   assert((grnxx::Float::max() * grnxx::Float::max()).is_infinite());
-  assert((grnxx::Float::infinity() * grnxx::Float::min()).is_infinite());
+  assert((grnxx::Float::infinity() * grnxx::Float::subnormal_min())
+         == grnxx::Float::infinity());
   assert((grnxx::Float::infinity() * grnxx::Float(0.0)).is_na());
   assert((grnxx::Float(1.0) * grnxx::Float::na()).is_na());
   assert((grnxx::Float::na() * grnxx::Float(1.0)).is_na());
@@ -570,7 +578,7 @@ void test_float() {
   assert((grnxx::Float(1.0) / grnxx::Float(2.0)) == grnxx::Float(0.5));
   assert((grnxx::Float(1.0) / grnxx::Float(0.0)).is_infinite());
   assert((grnxx::Float(1.0) / grnxx::Float::infinity()) == grnxx::Float(0.0));
-  assert((grnxx::Float::max() / grnxx::Float::min()).is_infinite());
+  assert((grnxx::Float::max() / grnxx::Float::subnormal_min()).is_infinite());
   assert((grnxx::Float::infinity() / grnxx::Float::max()).is_infinite());
   assert((grnxx::Float::infinity() / grnxx::Float::infinity()).is_na());
   assert((grnxx::Float(0.0) / grnxx::Float(0.0)).is_na());
-------------- next part --------------
HTML����������������������������...
Télécharger 



More information about the Groonga-commit mailing list
Back to archive index