C# 中浮点和双精度数据类型的实际范围是多少?

Posted

技术标签:

【中文标题】C# 中浮点和双精度数据类型的实际范围是多少?【英文标题】:What are the actual ranges of floating point and double data types in C#? 【发布时间】:2013-07-20 06:47:40 【问题描述】:

我正在学习 C#,并试图获得 C# 中实际数据类型范围的逻辑可视化表示。

我已经浏览了整数,现在可以使用浮点和双精度数据类型。

    8 位(1 字节),sbyte,-128 到 127。 8位(1字节),字节,0到255。 16 位(2 个字节),短,-32,768 到 32,767。 16位(2字节),ushort,0到65535。 32 位(4 字节),整数,-2,147,483,648 到 2,147,483,647。 32 位(4 字节),uint,0 到 4,294,967,295。 64 位(8 字节),长,-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 64 位(8 字节),ulong,0 到 18,446,744,073,709,551,615。

以下是 msdn 中对 float 和 double 数据类型大小的引用:

浮点数:http://msdn.microsoft.com/en-us/library/b1e65aza(v=vs.110).aspx

双人间:http://msdn.microsoft.com/en-us/library/678hzkk9.aspx

那么,为了遵守上面编号列表中指定实际数字范围的惯例,这两个范围实际上代表什么?

【问题讨论】:

它们代表float/double的最小值和最大值。你对什么感到困惑? 你的问题是“10^x 是什么意思?” @Alexei 是的,也许就是这样。如果我用计算器计算 10 的 324 次方,我会得到“无穷大”(easycalculation.com/exponential-power.php)。我不是数学人,所以请原谅我的无知。 【参考方案1】:

范围实际上是 –infinity 到 +infinity。

最大的有限float是340282346638528859811704183484516925440。这是2128–2128–24

在最大的有限强> double是179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.这是2 1024 SUP> -2 1024年至1053年 SUP>

【讨论】:

浮点数只有 32 位时,2 次方 128 怎么算? @Shad:浮点格式不使用二进制编码数字(至少不仅仅是二进制)。用符号、有效数字(通常以二进制表示,但可以使用压缩十进制和其他替代方式)和指数(通常是二进制加上偏置)对数字进行编码。有效数字可以接近 2(虽然它使用二进制,但它被缩放到 1 和 2 之间),典型的float 格式的指数范围可以从 -126 到 +127。它是 2 的指数,因此最大的有限值几乎是 2(从有效数字)乘以 2^127(从指数)。【参考方案2】:

为简洁起见,范围以“指数格式”表示。例如,+1.7e+308 表示 17 后跟 307 个零:

1,700,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000 P>

因此,对于如此大的数字,首选指数格式。对于极小的数字也是如此。

另外,看看 Jon Skeet 的 this reading。

【讨论】:

由于他们正在研究这两种数据类型,我认为最好知道浮点数的精度为 7 位和双 15-16 位,因为它们在 IEEE754 标准中表示. @Eren 所以浮点数的范围是negative 3.4 (followed by 38 zero's) to positive 3.4 (followed by 38 zero's) 而双精度数的范围是negative 5.0 (followed by 324 zero's) to positive 1.7 (followed by 308 zero's)? 好吧,我不会说“-3.4 后跟零”,因为“-3.4000000000....”仍然与 -3.4 的值相同。但也许会说“-34 后跟 37 个零”,或者更准确地说:“-3.4 乘以 10 的 38 次方”。为答案添加一个好的阅读链接。

以上是关于C# 中浮点和双精度数据类型的实际范围是多少?的主要内容,如果未能解决你的问题,请参考以下文章

浮点型是啥意思

什么是浮点型数据

c语言简单数据类型包括

浮点型数据存储方式

请问浮点型数据在计算机是怎么存储的

C 语言中双精度浮点型精度怎样保留位数