提问人:Z Z 提问时间:10/14/2023 更新时间:10/14/2023 访问量:51
在比较之前将浮点值转换为按位整数有什么好处?
benefit to convert float values to bitwise integer before comparing?
问:
当我们在 c# 中比较从 proto 文件生成的同一类的两个对象时,我们可以使用 since grpc protobuf 覆盖来比较每个字段。Equals()
Equals()
但是,对于浮点型和双精度型字段, 有这样的 ProtobufEqualityComparers:
/// <summary>
/// Provides a central place to implement equality comparisons, primarily for bitwise float/double equality.
/// </summary>
public static class ProtobufEqualityComparers
{
/// <summary>
/// Returns an equality comparer for <typeparamref name="T" /> suitable for Protobuf equality comparisons.
/// This is usually just the default equality comparer for the type, but floating point numbers are compared
/// bitwise.
/// </summary>
/// <typeparam name="T">The type of equality comparer to return.</typeparam>
/// <returns>The equality comparer.</returns>
public static EqualityComparer<T> GetEqualityComparer<T>()
{
if (typeof (T) == typeof (double))
return (EqualityComparer<T>) ProtobufEqualityComparers.BitwiseDoubleEqualityComparer;
if (typeof (T) == typeof (float))
return (EqualityComparer<T>) ProtobufEqualityComparers.BitwiseSingleEqualityComparer;
if (typeof (T) == typeof (double?))
return (EqualityComparer<T>) ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer;
return !(typeof (T) == typeof (float?)) ? EqualityComparer<T>.Default : (EqualityComparer<T>) ProtobufEqualityComparers.BitwiseNullableSingleEqualityComparer;
}
具体而言,有一个用于双精度值的 BitwiseDoubleEqualityComparer,以及用于浮点值的 BitwiseSingleEqualityComparer。
我们为什么需要它们?
我相信 BitwiseDoubleEqualityComparer 和 BitwiseSingleEqualityComparer 在比较浮点数时无法解决精度问题。
答: 暂无答案
评论