gpt4 book ai didi

c++ - 机器精度以及 double 类型的最大值和最小值

转载 作者:太空宇宙 更新时间:2023-11-04 00:42:46 25 4
gpt4 key购买 nike

(1)我遇到过几种将epsilon添加到非负变量以保证非零值的情况。所以我想知道为什么不添加数据类型可以代表的最小值而不是epsilon?这两个可以解决的区别问题是什么?

(2)我还注意到, double 类型的最大值的倒数大于其最小值,而其最小值的倒数是inf,远大于其最大值。计算最大值和最小值的倒数是否有用?

(3)对于很小的 double 正数,要计算其倒数,当倒数开始没有意义时,它的大小是多少?设定互惠上限是否更好?界限是多少?

感谢致敬

最佳答案

您需要了解如何在CPU中表示浮点数。在数据类型中,为符号保留1位,即无论它是正数还是负数(是的,您可以在浮点数中使用正负0,),然后为有效数保留若干位(或尾数),这些是浮点数的有效数字,最后为指数保留了一些位数。现在浮点数的值为:

-1 ^符号*有效位数* 2 ^指数

  • 这意味着最小的数字是一个很小的值,即具有最小指数的smalles有意义数。但是,舍入误差要大得多,并且取决于数字的大小,即具有给定指数的最小数字。 ε是1.0与下一个可表示的较大值之间的差。这就是在代码中使用epsilon的原因,该代码对于舍入错误具有鲁棒性,如果正确执行,实际上应该使用处理的数字的大小来缩放epsilon。通常,最小的可表示值实际上并没有任何重大用途。
  • 您将看到规范化最小值和非规范化最小值之间的差异。问题在于,由于使用了有效数的方式,可以使负指数大于正数,例如,有效位数的位模式除最后一位为1之外,全为零,则该指数有效降低有效位数。为了最大程度地执行此操作,即使将有效位数设置为所有有效位数,有效指数仍将仅是给定的指数。即,考虑0.000001e-10与9.999999e + 10之间的差异,第一个远小于第二个大。第一个实际上是1e-16,第二个大约是1e + 11。
  • 当然取决于浮点数的精度。在 double 情况下,最大值和下一个较小值之间的差已经很大(沿10 ^ 292行),因此舍入误差将非常大。如前所述,如果值太小,您将直接获得inf。确实,没有严格的答案,这完全取决于您所需数字的精度。考虑到舍入误差约为epsilon *量级,(1 / epsilon)的倒数已经具有大约1.0的舍入误差,如果您需要精确到1e-3的数字,那么甚至epsilon也将太大而无法除以。

  • 有关一些背景信息,请参见 IEEE754Machine epsilon上的这些维基百科页面。

    关于c++ - 机器精度以及 double 类型的最大值和最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2185953/

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