首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >双人商店是什么?

双人商店是什么?
EN

Stack Overflow用户
提问于 2018-02-10 12:46:13
回答 2查看 156关注 0票数 0

我将值4 *cos( fmod( acos(2.0/4.0), 2*3.14159265) )作为double发送到此函数,但输出为

代码语言:javascript
复制
2
1k1

这里怎么了?

代码语言:javascript
复制
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';
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-10 13:53:19

问题是cout在打印时会截断和循环两次。您可以使用iomanip库打印所需的小数位数。

代码语言:javascript
复制
#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;
}
票数 2
EN

Stack Overflow用户

发布于 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)的功能,但是在将结果打印到屏幕后,结果超出了范围。如果你想在计算指数和尾数后使用指数和尾数,那么你可以这样做。

代码语言:javascript
复制
#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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48720917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档