为了提高计算两个向量的点乘的精度,决定尝试对部分程序改用高精度,由此引来一个疑惑。
比如程序原先使用double运行,这时只对小段代码使用高精度,所以需要首先把double类型的数据转换成高精度数据结构。但是会有一些不太直观的结果。比如a=1*23.4=23.999...。
一开始我比较疑惑,输出a时,打印的a明明为23.4。后来我才想过来了,23.4在机器中无法精确表示,之所以打印出为23.4,是因为cout时做了调整。于是,加上以下代码:
int prec = std::numeric_limits <double>::digits10;
std::cout.setf(std::ios::fixed);
std::cout.precision(prec);
这样输出的结果就与高精度得到的结果一致了。