pow()函数的精度问题
妈蛋这个坑了我大半个小时都想不出个原因。。后来看到pow的定义才想起,数据类型很重要啊。。
1.底数用常量,指数用整型
#include <stdio.h>
#include <math.h>
int main()
{
int i,j;
for(i=;i<;i++)
{
j=pow(,i);
printf("%d\n",j);
}
return ;
}
运行结果:
1
10
99
1000
9999
100000
1000000
9999999
99999999
答案不是1000下去而是出现了9999999,一开始百撕不得其姐。。
看到定义后改用如下
2.底数用常量,指数用double
#include <stdio.h>
#include <math.h>
int main()
{
double i,j;
for(i=;i<;i++)
{
j=pow(,i);
printf("%.0lf\n",j);
}
return ;
}
运行结果:
1
10
100
1000
10000
100000
1000000
10000000
100000000
改用double就没事了
那么指数用常量呢
3.底数用常量,指数用常量
#include <stdio.h>
#include <math.h>
int main()
{
double i;
i=pow(,);printf("%.0lf\n",i);
i=pow(,);printf("%.0lf\n",i);
return ;
}
运行结果:
1000
10000
可见,指数用常量也是没问题的
经过n次测试,原因找出来了
再看另一组数据:
1.指数用int,pow值赋给int,结果错误
#include <stdio.h>
#include <math.h>
int main()
{
double d;
int p,i=;
p=pow(,i);
printf("%d\n",p);
return ;
}
运行结果:
999999999
2.指数用常量,pow值赋给int,结果正确
#include <stdio.h>
#include <math.h>
int main()
{
double d;
int p,i=;
p=pow(,);
printf("%d\n",p);
return ;
}
运行结果:
1000000000
3.指数用常量,pow值赋给double,结果正确
#include <stdio.h>
#include <math.h>
int main()
{
double d,p;
p=pow(,9);
printf("%.0lf\n",p);
return ;
}
运行结果:
1000000000
4.指数用int,pow值赋给double,结果正确
#include <stdio.h>
#include <math.h>
int main()
{
double d,p;
int i=;
p=pow(,i);
printf("%.0lf\n",p);
return ;
}
运行结果:
1000000000
5.指数用double,pow值赋给int,结果错误
#include <stdio.h>
#include <math.h>
int main()
{
double d,i=;
int p;
p=pow(,i);
printf("%d\n",p);
return ;
}
运行结果:
999999999
从数据看出
pow赋值给int的时候:指数用常量,结果正确;指数用int、double,结果错误
pow赋值给double的时候,指数用常量、int、double,结果都正确
结论,指数用什么类型无关紧要,重要的是pow的值要赋给一个double型变量。
pow()函数的精度问题的更多相关文章
- C语言pow()函数的计算精度问题
编程计算 a+aa+aaa+-+aa-a(n个a)的值,n和a的值由键盘输入.例如,当n=4,a=2,表示计算2+22+222+2222的值. 程序运行结果示例: Input a,n: 2,4↙ su ...
- pow()函数结果强制转化为int造成误差的分析
开发环境:codeblocks,编译器gcc 在计算102时调用pow(10, 2),再强制类型转换为int类型后输出: printf(,)); 得到的结果却是:99 这是因为 double pow( ...
- pow函数
pow函数如果直接强制类型转换成int,会导致精度的损失.如果是int的幂计算,建议重写函数.或者用double型进行计算.
- python实现pow函数(求n次幂,求n次方)
目录 类型一:求n次幂 类型二:求n开方 类型一:求n次幂 实现 pow(x, n),即计算 x 的 n 次幂函数.其中n为整数.pow函数的实现--leetcode 解法1:暴力法 不是常规意义上的 ...
- C语言pow函数编写
C语言pow函数编写 #include<stdio.h> double chaoba(double f,double q); //声明自定义函数 void main(void) { dou ...
- 汇编语言计算Sin,Cos,Pow函数
填了一下之前的坑.首先是一个题外话,在VS2015中默认汇编代码会使用SSE生成,如果想用FPU编译出FLD,FSTP这些指令,需要设置一下. 项目 >> 属性 >> C/C+ ...
- C语言--pow()函数实现
为什么自己实现一个pow()函数呢?昨天在Linux操作系统中调用这一个函数时,一直报错,也没有查找到具体的原因.故心血来潮实现这一函数功能. 函数所在头文件: 在"math.h&q ...
- Python3 pow() 函数
Python3 pow() 函数 Python3 数字 描述 pow() 方法返回 xy(x的y次方) 的值. 语法 以下是 math 模块 pow() 方法的语法: import math mat ...
- 日常踩坑——Dev C++ pow()函数的坑
坑 Dev C++ pow()函数 那年冬天,显示屏前坐着如喽啰,那时候我含泪发誓,再也不用Dev. 蓝桥杯官网给提供的版本,没办法bug也得硬着头皮用. 16年蓝桥杯的第八题 四平方和定理: 在De ...
随机推荐
- Python中类方法、__new__方法和__init__方法解析
在编程语言中创建一个类,有构造方法这样的一个术语.而在Python中,通常大家都认为__init__是构造方法,其实并不完全等同.在构建类中,有一个特殊的方法__new__,这个才能等同为构造方法. ...
- python 基础 4.0 函数的一般形式及传参
#/usr/bin/python #coding=utf-8 #@Time :2017/10/23 15:58 #@Auther :liuzhenchuan #@File :函数的一般形式.p ...
- inclusion_tag 看图
- mysql系列之6.mysql主从同步
普通文件的数据同步 nfs: 网络文件共享 samba: 共享数据 定时任务或守护进程结合 rsync.scp inotify(sersync)+rsync 触发式实时数据同步 ftp数据同步 ssh ...
- Swift 学习笔记(扩展和泛型)
在开始介绍Swift中的扩展之前,我们先来回忆一下OC中的扩展. 在OC中如果我们想对一个类进行功能的扩充,我们会怎么做呢. 对于面向对象编程的话,首先会想到继承,但是继承有两个问题. 第一个问题:继 ...
- win10+UEFI下u盘安装ubuntu16.04
本人电脑是华硕,由于要求使用linux所以安装: 1.首先给linux划出一个大分区,感觉最少50G: win10下磁盘管理,在最后的分区中压缩出50g,空间,其他的不用问了,也不用继续分区,一个大的 ...
- JVM GC调优一则--增大Eden Space提高性能
版权声明:本文为横云断岭原创文章,未经博主同意不得转载.微信公众号:横云断岭的专栏 https://blog.csdn.net/hengyunabc/article/details/24924843 ...
- subline 的常用命令
zsh 配置 编辑zsh 命令 vim .zshrc alias subl="/Applications/Sublime\ Text.app/Contents/SharedSupport/b ...
- Oracle数据库基础--存储过程和函数
一.存储过程和函数 存储过程: 对一个模块的封装 函数: 功能与存储过程几乎一样 区别: 函数必须通过return 关键字返回一个值 存储过程: 不需要return返回值 参数: 输入型参数 输出型参 ...
- 剑指Offer:对称的二叉树【28】
剑指Offer:对称的二叉树[28] 题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的. 题目分析 Java题解 /* publi ...