我正在使用协议缓冲区与gRPC。我有我的.proto文件看起来像gRPC中的协议缓冲区无法保存大型浮点数 - 该怎么办?
syntax = "proto3";
option java_multiple_files = true;
option objc_class_prefix = "DRPC";
package my_rpc;
service RPCData {
// Sends a cycle of data
rpc RunRequest (CycleData) returns (OutputScores) {}
}
message CycleData {
repeated float timestamps = 1;
repeated float values = 2;
}
但是系统似乎把我的价值观:
>>> dtw_rpc_pb2.CycleData(timestamps=[1501545616.742662], values=[5])
timestamps: 1501545600.0
values: 5.0
我想这不能代表准确的较大值:
>>> dtw_rpc_pb2.CycleData(timestamps=[16.742662], values=[5])
timestamps: 16.74266242980957
values: 5.0
>>> dtw_rpc_pb2.CycleData(timestamps=[45616.742662], values=[5])
timestamps: 45616.7421875
values: 5.0
>>> dtw_rpc_pb2.CycleData(timestamps=[1545616.742662], values=[5])
timestamps: 1545616.75
values: 5.0
>>> dtw_rpc_pb2.CycleData(timestamps=[1501545616.742662], values=[5])
timestamps: 1501545600.0
values: 5.0
我该怎么办?
谢谢你的信息。你能详细说明吗?是一个比C++ float更多字节编码的python float吗? (我认为两者都是用32字节编码的?)什么是“cpp”?它是C++编译器吗? – Make42
Python没有C风格的浮动,它只有一个C风格的双。 Python的内置浮点类型具有双精度。 是的“cpp”我的意思是C++。 “--cpp_implementation”是我们用于python protobuf的标志,如果有人想使用C++实现:https://github.com/google/protobuf/blob/master/python/README.md 我相信gRPC正在使用cpp_implementation –
@ Make42 gRPC Python pip包,将protobuf pip包列为依赖项。根据你pip安装的平台,Python protobuf包会加载两个底层代码路径之一,一个使用C++编写的Python扩展,另一个使用Python本地编写)。 gRPC本身使用任何潜在的protobuf安装,并且对任何一方都很满意,但是遇到的情况可能会有细微的行为差异。有一个PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION = python环境变量,即使在C++扩展可用时也会强制使用纯Python代码路径。 –