我将值4 *cos( fmod( acos(2.0/4.0), 2*3.14159265) )作为double发送到此函数,但输出为
2
1k1这里怎么了?
void convert_d_to_f(double n)
{
cout<<n<<" ";
double mantissa;
double fractional_part;
fractional_part = modf(n,&mantissa);
double x = fractional_part;
cout<<mantissa<<"k"<<fractional_part<<'\n';
}发布于 2018-02-10 13:53:19
问题是cout在打印时会截断和循环两次。您可以使用iomanip库打印所需的小数位数。
#include <iostream>
#include <cmath>
#include <iomanip>
void convert_d_to_f(double n)
{
cout<<std::fixed<<std::setprecision(20); //number of decimal places you need to print to
cout<<n<<" ";
double mantissa;
double fractional_part;
fractional_part = modf(n,&mantissa);
double x = fractional_part;
cout<<mantissa<<"k"<<fractional_part<<'\n';
}
int main() {
convert_d_to_f(4 *cos( fmod( acos(2.0/4.0), 2*3.14159265) ));
return 0;
}发布于 2018-02-10 14:36:17
出于所有实际目的和目的,您的数字n计算为2。如果您希望它显示为1.9999999...等,那么遵循Kapil的解决方案,并将std::cout的浮点精度设置为许多小数位。如果你要走那条路的话,要记住精确和精确之间的区别。
尽管如此,您的void convert_d_to_f(double n)函数正在复制std::frexp(double arg, int* exp)的功能,但是在将结果打印到屏幕后,结果超出了范围。如果你想在计算指数和尾数后使用指数和尾数,那么你可以这样做。
#include <iostream>
#include <cmath>
int main()
{
double n = 4 *cos( fmod( acos(2.0/4.0), 2*3.14159265) );
std::cout << "Given the number " << n << std::endl;
// convert the given floating point value `n` into a
// normalized fraction and an integral power of two
int exp;
double mantissa = std::frexp(n, &exp);
// display results as Mantissa x 2^Exponent
std::cout << "We have " << n << " = "
<< mantissa << " * 2^" << exp << std::endl;
return 0;
}https://stackoverflow.com/questions/48720917
复制相似问题