请问这段程序如何解决数据溢出的问题?是用__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

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