c# - 将 24 位值转换为 float 并返回

标签 c# floating-point

是否可以将24位整数值转换为浮点,然后再转换回24位整数而不丢失数据?

例如,我们考虑 8 位 int,一个字节,范围是 [-127..127](我们去掉 -128)。

public static float ToFloatSample (byte x) { return x / 127f; }

因此,如果x == -127,结果将为-1,如果x == 127,结果将为 >1。如果x == 64,结果将为~0.5

public static int ToIntSample (float x) { return (int) (x * 127f); }

现在:

int x = some_number;
float f = ToFloatSample (x);
int y = ToIntSample (f);

总是x == y吗?使用 8 位 int 是的,但是如果我使用 24 位怎么办?

最佳答案

思考了你的问题后,我现在明白你在问什么了。

我知道你有 24 位代表实数 n这样-1 <= n <= +1并且您想将其加载到 System.Single 的实例中,然后再回来。

在 C/C++ 中,这实际上很容易,使用 frexpldexp函数,记录在此处 ( how can I extract the mantissa of a double ),但在 .NET 中这是一个更复杂的过程。

C# 语言规范(因此,.NET)声明它使用 IEEE-754 1989 格式,这意味着您需要将这些位转储为整数类型,以便可以执行按位逻辑来提取组件。除了 System.Double 之外,这个问题已经在这里被问过。而不是System.Single ,但将答案转换为 Single对于读者来说这是一个微不足道的练习( extracting mantissa and exponent from double in c# )。

就您而言,您希望将 24 位尾数值存储在 Int32 的低 24 位中。然后使用该链接问题中的代码从 Single 加载并提取它实例。

关于c# - 将 24 位值转换为 float 并返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25876788/

相关文章:

C#动态选择字符串列表

javascript - 在 Javascript 中验证浮点精度

c++ - 浮点值可以加到零之和吗?

.net - 双入.net

floating-point - clang/gcc 只用 -ffast-math 生成 fma;为什么?

c# - LINQ 相当于 f# 的 builder.Zero()?

javascript - 转换为 Base64 时缩小图像大小

C# 排序 Arraylist 字符串按字母顺序和长度

c# - 激活 TabControl 的 TabPage

c++ - 处理融合乘加浮点不准确的通用方法