LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1813|回复: 8

怎么样提高C++浮点数的输出精度?

[复制链接]
发表于 2006-12-4 15:20:47 | 显示全部楼层 |阅读模式
float a;
cin>>a
键盘输入:188.888
cout<<a*a<<endl;
cout<<a*a*a<<endl;
控制台输出:
35678.7

用bc来算一下,结果为:35678.676

以前用C多(C里可以用(double)来提高精度),很少用C++,请教各位。
发表于 2006-12-4 17:15:23 | 显示全部楼层
cout<<setprecision(12)<<a*a<<endl;
当然要 #include <iomanip>
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-12-4 17:26:06 | 显示全部楼层
这个我照书上试过了,不行,还是说setprecision()没有声明

circle_1.cpp:31: 错误:‘setprecision’ 在此作用域中尚未声明

需不需要用 using 。。。。什么什么的?

我在用 #include <iostream> 中用 using std::cout之类的语句
否则 cout 也会说没有声明
回复 支持 反对

使用道具 举报

发表于 2006-12-4 18:11:16 | 显示全部楼层
那就using namespace std 试试
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-12-4 18:22:11 | 显示全部楼层
恩,谢谢,编译成功,用了 using namespace std 的话,
其它那三句using 就可不用了,不过 x11 可否解释一下,
用了 namesapce std 就不用include <iomanip>?它们有什么关系么?
回复 支持 反对

使用道具 举报

发表于 2006-12-5 19:54:55 | 显示全部楼层
std是一个namespace,新的C++标准把库函数写在了标准命名空间里面以防重名.google/baidu有很多详细介绍
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-12-6 08:15:42 | 显示全部楼层
谢谢,我有些问题不该问,但还是忍不住先在这里发问了,然后再去baidu google搜索。

呵呵,谢谢啦。
回复 支持 反对

使用道具 举报

发表于 2006-12-10 02:00:55 | 显示全部楼层
> vi double.cpp

#include <iostream>
#include <iomanip>

int main(int argc, char** argv)
{
        double d = 10.0;
        std::cout << std::setprecision(12) << d / 3 << std::endl;
        return 0;
}

> g++ -o double double.cpp
> ./double
3.33333333333

没问题呀
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-12-10 11:59:45 | 显示全部楼层
用setprecision这种方法不能设置小数点后有多少位,只能设定有效数位个数

如setprecision(12),有效数位就为11个(个人认为,好像是最后一位是估计的,不是有效的)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表