浏览代码

Merge pull request #3240 from thomasvl/float_fun

Raise the number of digits used for floats.
Thomas Van Lenten 8 年之前
父节点
当前提交
72e293a28f
共有 3 个文件被更改,包括 3 次插入1 次删除
  1. 1 0
      conformance/conformance_test.cc
  2. 1 0
      conformance/failure_list_ruby.txt
  3. 1 1
      src/google/protobuf/stubs/strutil.cc

+ 1 - 0
conformance/conformance_test.cc

@@ -759,6 +759,7 @@ bool ConformanceTestSuite::RunSuite(ConformanceTestRunner* runner,
   });
   });
   TestValidDataForType(FieldDescriptor::TYPE_FLOAT, {
   TestValidDataForType(FieldDescriptor::TYPE_FLOAT, {
     {flt(0.1), "0.1"},
     {flt(0.1), "0.1"},
+    {flt(1.00000075e-36), "1.00000075e-36"},
     {flt(3.402823e+38), "3.402823e+38"},  // 3.40282347e+38
     {flt(3.402823e+38), "3.402823e+38"},  // 3.40282347e+38
     {flt(1.17549435e-38f), "1.17549435e-38"}
     {flt(1.17549435e-38f), "1.17549435e-38"}
   });
   });

+ 1 - 0
conformance/failure_list_ruby.txt

@@ -199,5 +199,6 @@ Required.ProtobufInput.DoubleFieldNormalizeQuietNan.JsonOutput
 Required.ProtobufInput.DoubleFieldNormalizeSignalingNan.JsonOutput
 Required.ProtobufInput.DoubleFieldNormalizeSignalingNan.JsonOutput
 Required.ProtobufInput.FloatFieldNormalizeQuietNan.JsonOutput
 Required.ProtobufInput.FloatFieldNormalizeQuietNan.JsonOutput
 Required.ProtobufInput.FloatFieldNormalizeSignalingNan.JsonOutput
 Required.ProtobufInput.FloatFieldNormalizeSignalingNan.JsonOutput
+Required.ProtobufInput.ValidDataRepeated.FLOAT.JsonOutput
 Required.TimestampProtoInputTooLarge.JsonOutput
 Required.TimestampProtoInputTooLarge.JsonOutput
 Required.TimestampProtoInputTooSmall.JsonOutput
 Required.TimestampProtoInputTooSmall.JsonOutput

+ 1 - 1
src/google/protobuf/stubs/strutil.cc

@@ -1401,7 +1401,7 @@ char* FloatToBuffer(float value, char* buffer) {
   float parsed_value;
   float parsed_value;
   if (!safe_strtof(buffer, &parsed_value) || parsed_value != value) {
   if (!safe_strtof(buffer, &parsed_value) || parsed_value != value) {
     int snprintf_result =
     int snprintf_result =
-      snprintf(buffer, kFloatToBufferSize, "%.*g", FLT_DIG+2, value);
+      snprintf(buffer, kFloatToBufferSize, "%.*g", FLT_DIG+3, value);
 
 
     // Should never overflow; see above.
     // Should never overflow; see above.
     GOOGLE_DCHECK(snprintf_result > 0 && snprintf_result < kFloatToBufferSize);
     GOOGLE_DCHECK(snprintf_result > 0 && snprintf_result < kFloatToBufferSize);