c - 对 IEEE 754 的理解存在问题

标签 c floating-point ieee-754

首先,我想指出,我不是母语人士,我确实需要一些更常用的术语。

我想提的第二件事是我不是数学天才。我真的很想了解有关编程的一切..但是 ieee-754 让我认为它永远不会发生..它充满了我不理解的数学术语..

<小时/>

什么是精度?它是干什么用的?什么是尾数以及尾数的用途是什么?如何确定float的范围/double按它们的大小? ± 符号(加减)有什么用? (我相信它是积极/消极的选择,但这与一切有什么关系?),

你们能不能给我提供一些简单明了的解释? 我花了 600 年的时间试图理解维基百科。我非常失败。

最佳答案

What is precision?

它指的是二进制浮点表示法可以多么接近地表示真实值。实数值具有无限的精度和无限的范围。数字值具有有限的范围和精度。实际上,单精度 IEEE-754 可以表示 6 位有效数字(十进制)精度的实际值,而 double 则适合 15 位有效数字。

例如,这样的实际效果是,单个精度值:123456000.00无法与123456001.00区分开,但同样可以表示值0.00123456。

What is it used for?

精度除了定义特定浮点表示的特征之外不用于任何其他用途。

What is mantissa and what is mantissa used for?

该术语在英语维基百科文章中没有提及,并且不精确 - 在一般数学中,它具有与此处使用的不同含义。

正确的术语是有效数字。例如,对于十进制值 0.00123456,有效数为 123456123456000.00 具有完全相同的有效数字。这些值中的每一个都具有相同的有效数,但具有不同的指数。指数是一个缩放因子,它确定小数点的位置(因此浮点)。

当然,IEEE754 是一种二进制浮点表示形式,而不是十进制,但对于术语的解释相同,使用十进制可能更容易。

How to determine the range of float/double by their size?

仅凭尺寸你不能;您需要知道有多少位分配给有效数以及有多少位分配给指数。然而,在 C 中,该范围由 float.h header 中的宏 FLT_MINFLT_MAXDBL_MINDBL_MAX 定义。此处还描述了实现浮点表示的其他特征。

请注意,特定编译器实际上可能不使用 IEEE754,但这是大多数硬件 FPU 实现所使用的格式,编译器自然会遵循该格式。对于没有 FPU 的目标(通常是小型嵌入式处理器),可以使用其他格式。

What is ± symbol (Plus-minus) used for?

它只是意味着给定的值可以是正值也可以是负值。它可以指一个特定的值,也可以指示一个范围。因此±n 可能指两个离散值-n +n,也可能表示范围-n +n。上下文就是一切!在this article中它指的是离散值+0、-0、+∞和-∞。

关于c - 对 IEEE 754 的理解存在问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26441654/

相关文章:

c - 如何在 Xcode 上运行现有的 C 文件

c - 不明白为什么我有这些错误 : Invalid read of size 1 and Syscall param unlink(pathname) points to unaddressable byte(s)

c++ - 如何提取给定特定颜色的图像的一部分?

floating-point - 如何以可移植的方式将 float 四舍五入到特定位数

c++ - std::pow 不返回预期的 int 值

c++ - Matlab 与 C++ double

c++ - NAN 传播和 IEEE 754 标准

c++ - C++中double/float类型二进制序列化的可移植性

c - 即使在关闭套接字后,服务器仍继续在客户端/服务器 C 应用程序中运行

objective-c - 以科学记数法显示 float