首先,我想指出,我不是母语人士,我确实需要一些更常用的术语。
我想提的第二件事是我不是数学天才。我真的很想了解有关编程的一切..但是 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
,有效数为 123456
。 123456000.00
具有完全相同的有效数字。这些值中的每一个都具有相同的有效数,但具有不同的指数。指数是一个缩放因子,它确定小数点的位置(因此浮点)。
当然,IEEE754 是一种二进制浮点表示形式,而不是十进制,但对于术语的解释相同,使用十进制可能更容易。
How to determine the range of float/double by their size?
仅凭尺寸你不能;您需要知道有多少位分配给有效数以及有多少位分配给指数。然而,在 C 中,该范围由 float.h header 中的宏 FLT_MIN
、FLT_MAX
、DBL_MIN
和 DBL_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/