什么';s C+中数据类型double的数字限制+;? 我在C++应用程序中处理非常大的数,它可以超过64位变量,而当查看: qDebug("lowest: %f", std::numeric_limits<double>::lowest()); qDebug("max: %f", std::numeric_limits<double>::max());

什么';s C+中数据类型double的数字限制+;? 我在C++应用程序中处理非常大的数,它可以超过64位变量,而当查看: qDebug("lowest: %f", std::numeric_limits<double>::lowest()); qDebug("max: %f", std::numeric_limits<double>::max());,c++,limit,numerical,C++,Limit,Numerical,这使我得出结论,double数据类型的大小可以是2048位。然而,我从未听说在标准机器上有大于64位的变量 我的假设一定有问题。谁能给我解释一下吗? (另外,如果有必要的话,我会在我的应用程序中使用QT框架和OpenCv。)您必须了解双精度编码是如何回答您自己的问题的:有帮助吗?可能重复。找到一个更好的。:)所以基本上,双精度表示法就像科学记数法一样,区别在于基数是2而不是10,还有一些特殊情况。我不明白的是:维基百科说“指数的11位宽度允许表示10到10之间的数字^−308和10^308,精度

这使我得出结论,double数据类型的大小可以是2048位。然而,我从未听说在标准机器上有大于64位的变量

我的假设一定有问题。谁能给我解释一下吗?
(另外,如果有必要的话,我会在我的应用程序中使用QT框架和OpenCv。)

您必须了解双精度编码是如何回答您自己的问题的:有帮助吗?可能重复。找到一个更好的。:)所以基本上,双精度表示法就像科学记数法一样,区别在于基数是2而不是10,还有一些特殊情况。我不明白的是:维基百科说“指数的11位宽度允许表示10到10之间的数字^−308和10^308,精度为15–17位小数。”。这是否意味着可以有10^616个独特的州?我认为“std::numeric_limits::max()”应该输出一个15-17位数字,其中291-293(308-15或17)跟在零后面。但在我的例子中,它打印了308个(大部分)非零数字。大多数数字在基数2中为0并不意味着大多数数字在基数10中为0。如果你需要更详细的解释,请问一个新问题。
lowest: -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000
max: 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000