【发布时间】:2017-11-04 13:32:06
【问题描述】:
对于我正在学习的内容,一旦我将浮点值转换为十进制值,我需要的“有效数字”就是一个固定数字(例如,17 表示双精度数)。总计 17 个:小数点前后分隔符。
例如这段代码:
typedef std::numeric_limits<double> dbl;
int main()
{
std::cout.precision(dbl::max_digits10);
//std::cout << std::fixed;
double value1 = 1.2345678912345678912345;
double value2 = 123.45678912345678912345;
double value3 = 123456789123.45678912345;
std::cout << value1 << std::endl;
std::cout << value2 << std::endl;
std::cout << value3 << std::endl;
}
将正确“显示”17 个值:
1.2345678912345679
123.45678912345679
123456789123.45679
但如果我提高cout(即std::cout.precision(100))的精度,我可以看到17 范围之后还有其他数字:
1.2345678912345678934769921397673897445201873779296875
123.456789123456786683163954876363277435302734375
123456789123.456787109375
为什么要忽略它们?它们也存储在 variables/double 中,因此它们稍后会影响整个“数学”(除法、乘法、求和等)。
“有效数字”是什么意思?还有其他...
【问题讨论】:
-
意思和其他地方一样。如果您测量某物并确定它大约 1 英寸长,然后转换为公制并说它大约 2.54 厘米长,那么您就陷入了错误的精确度。原始值有 1 位有效数字;新的有3。第二个值的最后两位是废话。
-
当然,但是处理器会“细化” 17° 之后的数字,而不是“截断”它们。 N步后有积累……
标签: c++ floating-point digit