ZENOTME commented on code in PR #406:
URL: https://github.com/apache/iceberg-rust/pull/406#discussion_r1642947050


##########
crates/iceberg/src/spec/values.rs:
##########
@@ -2334,9 +2453,20 @@ mod _serde {
                 },
                 RawLiteralEnum::Float(v) => match ty {
                     Type::Primitive(PrimitiveType::Float) => 
Ok(Some(Literal::float(v))),
+                    Type::Primitive(PrimitiveType::Double) => {
+                        Ok(Some(Literal::double(f64::from(v))))
+                    }
                     _ => Err(invalid_err("float")),
                 },
                 RawLiteralEnum::Double(v) => match ty {
+                    Type::Primitive(PrimitiveType::Float) => {
+                        let v = v as f32;
+                        // Return error if the value has lost precision
+                        if v as f64 != f64::from(v) {

Review Comment:
   > Surely in almost all cases precision will be lost unless the last 29 bits 
of the f64's fraction are all zeroes (which is about 1 in half a billion), as 
this comparison will be bitwise?
   
   I think the check here is to deal with the case that serialize f32 to f64 
and deserialize back to f32. In this case, there is no precision loss.
   For the case loss precision, which means that the deserializer wants to 
deserialize a f64 to f32. I think this means something wrong happened. 🤔
   I think here, what we need to check is **whether this f64 is compatible with 
f32, or says, whether this f64 can be converted to f32 without losing 
precision.** This means that this f64 can convert from a f32. 
   I'm not sure wether my understand of float point is correct, so please 
correct me if I'm wrong.
   
   



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscr...@iceberg.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@iceberg.apache.org
For additional commands, e-mail: issues-h...@iceberg.apache.org

Reply via email to