gpt4 book ai didi

从 double 进行以 10 为底的有效 + 指数计算的 C++ 函数

转载 作者:太空宇宙 更新时间:2023-11-04 12:18:48 24 4
gpt4 key购买 nike

我需要使用以下结构来表示数字。这种结构的目的是不丢失精度。

struct PreciseNumber
{
long significand;
int exponent;
}

使用此结构,实际 double 值可以表示为 value = significand * 10e^exponent

现在我需要编写可以将 double 转换为 PreciseNumber 的实用函数。

你能告诉我如何从 double 中提取指数和尾数吗?

最佳答案

前奏有点瑕疵。

首先,除非对存储空间有任何限制,否则从 double 到以 10 为底的有效指数形式的转换不会以任何形式改变精度。要理解这一点,请考虑以下内容:任何二进制终止分数(例如在典型的 IEEE-754 float 上形成尾数的分数)都可以写成两个负幂的和。 2 的每个负幂本身就是终止分数,因此它们的和也必须终止。

然而,反之则不一定成立。例如,0.3 base 10 等同于 non-terminating 0.01 0011 0011 0011 ... in base 2。将其放入固定大小的尾数会降低一些精度它的(这就是为什么 0.3 实际上存储为转换回 0.29999999999999999 的原因。)

据此,我们可以假设以十进制有效数指数形式存储数字的任何精度要么丢失,要么根本无法获得。

当然,您可能会认为将十进制数存储为 float 所产生的明显精度损失与精度损失一样,在这种情况下,Decimal32 和 Decimal64 浮点格式可能会引起一些兴趣——查看 http://en.wikipedia.org/wiki/Decimal64_floating-point_format

关于从 double 进行以 10 为底的有效 + 指数计算的 C++ 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6271256/

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