Commit 8c2d4f65 by LaiyuanGong Committed by Zhi

[NODE][Serialization]fix serialization precision loss in float (#4503)

* fix serialization precision loss in float

When we want to serialize a tvm.tensor object(like pickle), we will get a precision loss cause by std::to_string()。
For example, a2.value will be 0.0 while a.value=0.00000001 in the following: 
    import tvm
    import pickle
    a = tvm.const(0.00000001, 'float32')
    a2 = pickle.loads(pickle.dumps(a))

* remove line end spaces
parent fd6560e1
......@@ -167,7 +167,11 @@ class JSONAttrGetter : public AttrVisitor {
ReflectionVTable* reflection_ = ReflectionVTable::Global();
void Visit(const char* key, double* value) final {
node_->attrs[key] = std::to_string(*value);
std::ostringstream s;
// Type <double> have approximately 16 decimal digits
s.precision(16);
s << (*value);
node_->attrs[key] = s.str();
}
void Visit(const char* key, int64_t* value) final {
node_->attrs[key] = std::to_string(*value);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment