风起鸿庄Nirvana 2021-08-11 21:08 采纳率: 85.7%
浏览 14
已结题

请问这段程序如何解决数据溢出的问题?是用__int64的方法吗?

但我这里用的是double啊。不知道怎么改了

#include <stdio.h>
#include <time.h>
#include <math.h>
clock_t start, stop;/*clock_t是clock()函数返回的变量类型*/
double duration;
#define MAXN 1e7
double f1(int n,double a[],double x)
{
    double p = a[0];//a[0]都已经算出来了,循环从1开始
    for (int i = 0; i <= n ; i++)
        p +=( a[i] * pow(x, i));
    return p;
}
double f2(int n, double a[], double x) {
    int i;
    double p = a[n];
    for (i = n; i > 0; i--) {
        p = a[i - 1] + x * p;
    }
    return p;
}
double ceshijian()
{
    stop = clock();/*停止计时*/
    duration = ((double)(stop - start)) / CLK_TCK / MAXN;/*计算单次运行时间*/
    printf("ticks=%f\n", (double)(stop - start));
    printf("duration=%6.2e\n\n", duration);
    return 0;
}
int main()
{
    int i;
    double a[MAXN];
    for (i = 0; i < MAXN; i++) {
        a[i] = (double)i;
    }
    /*不在测试范围内的准备工作写在clock()调用之前*/
    start = clock();/*开始计时*/
    for(int i=0;i<MAXN;i++)//重复调用
        f1(MAXN - 1, a, 1.1);/*被测函数,这里如果写数组的话就越界了,而且要调用某个值是不确定的,只能写a,因为要定义的就是a值*/
    ceshijian();

    start = clock();/*开始计时*/
    for (i = 0; i < MAXN; i++)
        f2(MAXN - 1, a, 1.1);/*被测函数,这里如果写数组的话就越界了,而且要调用某个值是不确定的*/
    ceshijian();
    return 0;
}


img

  • 写回答

1条回答 默认 最新

  • 风起鸿庄Nirvana 2021-08-11 21:26
    关注

    我知道怎么改了,大家不用回答了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月20日
  • 已采纳回答 8月12日
  • 创建了问题 8月11日

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料