gpt4 book ai didi

c++ - 如何在 C++ 中正确规范化浮点值?

转载 作者:可可西里 更新时间:2023-11-01 18:18:40 27 4
gpt4 key购买 nike

也许我不太了解 IEEE754 标准,但是给定一组 floatdouble 的浮点值,例如:

56.543f 3238.124124f 121.3f ...

您可以将它们转换为从 01 的值,因此您可以通过在考虑最大值和集合中的最小值。

现在我的观点是,如果与我需要第一个,特别是如果第一组中的值涵盖范围很广的数值(非常大和非常小的值)。

floatdouble(或 IEEE 754 标准,如果需要)类型如何处理这种情况,同时为第二组值提供更高的精度,因为知道我基本上不需要整数部分?

或者它根本不处理这个,我需要完全不同类型的定点数学?

最佳答案

float 以类似于科学记数法的格式存储。在内部,它们将二进制表示的前导 1 对齐到有效数字的顶部。每个值都带有相对于其自身大小的相同精度的二进制数字。

当您将一组浮点值压缩到范围 0..1 时,您将获得的唯一精度损失将是由于过程的各个步骤中发生的舍入。

如果您只是通过缩放进行压缩,您只会损失尾数 LSB 附近的少量精度(大约 1 或 2 ulp,其中 ulp 表示“最后位置的单位”)。

如果您还需要转移数据,那么事情就会变得更加棘手。如果您的数据都是正数,那么减去最小的数字不会损坏任何东西。但是,如果您的数据是正数据和负数据的混合,那么您的一些接近零的值可能会遭受精度损失。

如果您以 double 精度执行所有算术运算,您将在整个计算过程中携带 53 位精度。如果您的精确度需要符合这一要求(他们很可能会这样做),那么您会没事的。否则,确切的数值性能将取决于您的数据分布。

关于c++ - 如何在 C++ 中正确规范化浮点值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20474946/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com