在使用在整型计算中,如果次方数过大,使用 pow 会出现一些问题。比如这两个代码,本质上计算是相同,并没有什么区别。#include stdio.h#include math.hint main(){long long s=0,a;for (int i=1;i=60;i++...
在使用在整型计算中,如果次方数过大,使用 pow 会出现一些问题。
比如这两个代码,本质上计算是相同,并没有什么区别。
#include <stdio.h>
#include <math.h>
int main()
{
long long s=0,a;
for (int i=1;i<=60;i++){
s+=pow(2,i-1);
}
printf("%lld",s);
return 0;
}
#include <stdio.h>
#include <math.h>
int main()
{
long long s=0,a;
for (int i=1;i<=60;i++){
a=pow(2,i-1);
s+=a;
}
printf("%lld",s);
return 0;
}
运行结果如下(不怎么会调图片大小,就放原截图了)
发现运行结果差1


调试中
在循环当中插入
printf("%d %lld\n",i,s);
发现是进行第54次循环时出现了问题

和同学讨论,发现了原因出在哪里,并解决了这个问题
C语言 pow 的原函数是 double pow,计算的结果返回的是 double,也就是双精度。
所以我们要自我设定一个关于 long long 类型的 pow 函数。
long long longpow(int x,int y)
{
int i;
long long p=1;
for (i=1;i<=y;i++){
p*=x;
}
return(p);
}
运行的前面两种方式(附代码和运行结果)
#include <stdio.h>
#include <math.h>
int main()
{
long long longpow(int x,int y);
long long s=0,a=0;
for (int i=1;i<=60;i++){
s+=longpow(2,i-1);
}
printf("%lld",s);
return 0;
}
long long longpow(int x,int y)
{
int i;
long long p=1;
for (i=1;i<=y;i++){
p*=x;
}
return(p);
}

#include <stdio.h>
#include <math.h>
int main()
{
long long longpow(int x,int y);
long long s=0,a=0;
for (int i=1;i<=60;i++){
a=longpow(2,i-1);
s+=a;
}
printf("%lld",s);
return 0;
}
long long longpow(int x,int y)
{
int i;
long long p=1;
for (i=1;i<=y;i++){
p*=x;
}
return(p);
}

这是写博客的第三次,不好请多多担待
沃梦达教程
本文标题为:C语言学习———pow的使用
猜你喜欢
- ubuntu下C/C++获取剩余内存 2023-09-18
- C++ 数据结构超详细讲解顺序表 2023-03-25
- C语言手把手带你掌握带头双向循环链表 2023-04-03
- C语言qsort()函数的使用方法详解 2023-04-26
- Easyx实现扫雷游戏 2023-02-06
- Qt计时器使用方法详解 2023-05-30
- 详解C语言中sizeof如何在自定义函数中正常工作 2023-04-09
- 我应该为我的项目使用相对包含路径,还是将包含目录放在包含路径上? 2022-10-30
- C语言详解float类型在内存中的存储方式 2023-03-27
- c++ const 成员函数,返回一个 const 指针.但是返回的指针是什么类型的 const? 2022-10-11
