-10是否在1.5×10 ^ -45和3.4×10 ^ 38之间?

时间:2019-03-05 10:22:59

标签: c# c#-4.0 floating-point c#-3.0

-10是否在1.5e-45和3.4e + 38之间?

如果是,请向我解释原因。我的数学能力不再那么强。因此,对这些问题级别的弱点感到抱歉。

根据C# documentation (of computer programming for that language) on Microsoft site,它们的变量float类型在1.5×1e-45和3.4×1e + 38之间?

但是, 1e-3 等于 0.001 ,而 1e-6 等于 0.000001 。这意味着我们减少负指数的次数越多,所得的值就越少,但一个仍大于零。

这是问题所在,我尝试使用给定值 -10 的float变量作为期望出现错误的值,但令我惊讶的是, -10 被接受了。 我很困惑。

3 个答案:

答案 0 :(得分:3)

文档中没有明确说明,但是两个浮点类型已签名。因此-10可以由浮点类型表示,就像10一样。

答案 1 :(得分:1)

有几件事要注意。

第一个是float(因此double)被签名,因此值可以是正数或负数(或零)。

另一个是范围是精度问题。如果您尝试将float的绝对值设置为比其无法处理的绝对值小,例如1E-50,它将被设置为零而不是错误;当您将1×10 -50 舍入到它可以应付的精度时,这就是您得到的,而如果您尝试为其提供大于它可以处理的绝对值的值,例如{{1 }},然后将其设置为∞(对于1E50,则将其设置为-∞),因为同样,它也可以表示很大的东西。

答案 2 :(得分:0)

该C#文档编写得不好,并且有一些错误或遗漏:

  • 它描述的范围仅适用于正有限数的幅值。浮点格式还包括零,负数和无穷大。因此,真实范围是从-∞到+∞。
  • 它使用近似十进制值来描述范围。 float的真实值为:
    • 可表示的最小正数恰好是2 −149 ,即1.40129846432481707092372958328991613128026194187651577175706828388979108268586060148663818836212158203125e-45。
    • 可表示的最大有限数恰好是2 128 −2 104 ,即340282346638528859811704183484516925440。