网页
资讯
视频
图片
知道
文库
贴吧
地图
采购
进入贴吧
全吧搜索
吧内搜索
搜贴
搜人
进吧
搜标签
日
一
二
三
四
五
六
签到排名:今日本吧第
个签到,
本吧因你更精彩,明天继续来努力!
本吧签到人数:0
一键签到
成为超级会员,使用一键签到
一键签到
本月漏签
0
次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行
补签
。
连续签到:
天 累计签到:
天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
05月22日
漏签
0
天
c++吧
关注:
541,553
贴子:
2,091,082
看贴
图片
吧主推荐
游戏
21
回复贴,共
1
页
<<返回c++吧
>0< 加载中...
大一萌新求助
只看楼主
收藏
回复
学不会c++
?:
4
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
8u们,输出e的泰勒展开要求保留10位有效数字,为什么我的程序跟正确的差了这么多吗?输入的x值越小越不准确。。求助大佬们
Mihari丶173
=
2
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
有可能是位数太多导致的精度丢失过于明显,精度丢失是不可避免的,只能提高精度,你把数据类型从double改成long double试一试?可能是这个原因吧,我猜的
低头
&&
6
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
你的程序到1e-6就不运行了,只能保证前5位小数是准确的
Lover
||
5
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
有可能是少加了一项?和答案的差也是10-6次方量级的
学不会c++
?:
4
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
学不会c++
?:
4
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
venefelis
&
9
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
你这是因为只计算到项少于1e-6引起的,如果想要限制总体误差小于1e-6应该去找整体误差公式算一下,我现在在外面没法直接给你误差公式,此外用double, 用float即使有误差公式也会因为精度不够产生误差较大的问题
低头
&&
6
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
写了一下才发现你是判断的位置不对,这样就ok了
五月是我生日
throw
3
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
你多加了一项,少加一项就对了
venefelis
&
9
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
#include <iostream>
#include <vector>
const double eps = 1e-14; // 需要的精确值
/**
* 去计算多项式的项数
*/
int get_ee_N(double x)
{
int N=23;
if(x<=0.5) N=14;/*See Ch3 Table 7.1 */
if(x<=1.0) N=18;
return N;
}
/**
* 计算前n项的值
* 这里使用的是在0处的展开式,计算时应该x应尽可能贴近0
*/
double ee_N(double x, int n)
{
double ans = 1.0;
double yi;
for (int i = n; i > 0; --i)
{
yi = x / (double)i;
ans = 1.0 + yi * ans;
}
return ans;
}
/**
* 包装一层能算大数负数,能少写点东西
*/
double ee(double x)
{
if (x > 1)
return ee(x - 1.0) * ee(1.0);
if (x < 0)
return 1.0/(ee(-x));
return ee_N(x, get_ee_N(x));
}
int main()
{
int n = 3;
std::cin >> n;
std::vector<double> in(n);
double temp;
for (int i = 0; i < n; i++)
{
std::cin >> temp;
in[i] = temp;
}
for (int i = 0; i < n; i++)
{
printf("%.14lf\n", ee(in[i]));
}
return 0;
} 用这段计算试试
登录百度账号
扫二维码下载贴吧客户端
下载贴吧APP
看高清直播、视频!
贴吧页面意见反馈
违规贴吧举报反馈通道
贴吧违规信息处理公示