pow()函数结果强制转化为int造成误差的分析
开发环境:codeblocks,编译器gcc
在计算102时调用pow(10, 2),再强制类型转换为int类型后输出:
printf("%d",(int)pow(,));
得到的结果却是:99
这是因为 double pow(double x, double y) ,返回值是采用数值逼近的方法得到的double类型值。例如返回值为99.9999999时,强制类型转换发生截断,得到99。
仔细分析后发现:
因为pow函数导致从double返回值类型向int型转化的时候是直接把小数部分切掉,
导致原先double型的小数部分不再四舍五入,从而失去了整数部分的精度,最终结果差1
最简单的解决方案:+ 0.5
(int)(pow(, ) + 0.5) // 返回值为100
解决方案2:
自行编写 pow() 函数,以整型作为形参与返回值。
解决方案3:
运用四舍五入函数:
printf("%d",(int)round(pow(,)));
ps: 在vc6.0运行是正确的,在codeblock上就是错误的。应该是编译器的问题了。
参考:
https://blog.csdn.net/Ratina/article/details/86538025
https://blog.csdn.net/changer_WE/article/details/80379171
pow()函数结果强制转化为int造成误差的分析的更多相关文章
- pow函数
pow函数如果直接强制类型转换成int,会导致精度的损失.如果是int的幂计算,建议重写函数.或者用double型进行计算.
- C++中将string类型转化为int类型
写程序需要将string转化为int,所以就探索了一下. 方法一:atoi函数 atoi函数将字符串转化为整数,注意需要stdlib库.所以就尝试了一下: #include <iostream& ...
- 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 ...
- C语言--pow()函数实现
为什么自己实现一个pow()函数呢?昨天在Linux操作系统中调用这一个函数时,一直报错,也没有查找到具体的原因.故心血来潮实现这一函数功能. 函数所在头文件: 在"math.h&q ...
- 日常踩坑——Dev C++ pow()函数的坑
坑 Dev C++ pow()函数 那年冬天,显示屏前坐着如喽啰,那时候我含泪发誓,再也不用Dev. 蓝桥杯官网给提供的版本,没办法bug也得硬着头皮用. 16年蓝桥杯的第八题 四平方和定理: 在De ...
- pow函数(数学次方)在c语言的用法,两种编写方法实例( 计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值)
关于c语言里面pow函数,下面借鉴了某位博主的一篇文章: 头文件:#include <math.h> pow() 函数用来求 x 的 y 次幂(次方),x.y及函数值都是double型 , ...
- pow() 函数
pow() 函数用来求 x 的 y 次幂(次方),其原型为: double pow(double x, double y); #include<iostream> #include< ...
- (函数分治法)实现pow函数(x的y次方幂)
题目:实现pow函数. 题目分析:因为一个一个乘,循环太大,参考矩阵连乘问题:对于n=4的话,可以得出x的平方,然后平方与平方相乘.节省计算次数.对于偶数的幂,只要x的平方多次递归调用即可:对于奇数的 ...
- Arduino 将 String 转化为 int
Arduino 将 String 转化为 int 函数:toInt() 实例: String my_str = "; int my_int = my_str.toInt();
随机推荐
- 在Mac OS X下使用Apache、PHP、MySQL、Netbeans、Yii
本文环境: Mac OS X:10.8.4 Apache:2.2.22 PHP:5.3.15 Netbeans:7.3.1 Yii:1.1.14 Mac OS X是内置了Apache服务器的,不过默认 ...
- richedit缩放
本程序下载地址: 要使文本在richedit控件上进行放大缩小,可以通过设置字体的大小,从而来达到缩放文本的目的. 下面是一个例子:通过调整滚动条,从而控制richedit文本缩放. 程序运行结果如下 ...
- Gerrit 添加用户
使用ssh添加用户 ssh name@localhost -p 29418 gerrit create-account username --email username@email --full-n ...
- 【Swift】iOS开发笔记(一)
前言 边开发边学习,边攒经验,汇总一下记录到这里 声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.com 农民伯伯: http://over140.cnblog ...
- ubuntu 18.04安装pytorch、cuda、cudnn等
版权声明:本文为博主原创文章,欢迎转载,并请注明出处.联系方式:460356155@qq.com ubuntu 16.04用了1年多了,18.04版已经发布也半年了,与时俱进,重装Linux系统,这里 ...
- H5的表格
表格标签<table> 绘制表格的标签:<table>标签 表格标题:<caption>标签 表格宽度与高度:width和height属性 表格边框色:border ...
- Win10 + Ubuntu双系统,删除Ubuntu系统
之前在电脑上装了win10 + ubuntu的双系统,偶尔会出问题,所以还是选择将ubuntu系统删掉. 正所谓“请神容易送神难”,安装ubuntu的时候,过程还算顺利,但是在删除Ubuntu的过程中 ...
- Linux查看用户登录信息-last
last命令: last命令用于显示用户最近登录信息.单独执行last命令,将读取 /var/log/wtmp 文件,并将给该文件的内容记录的登入系统的用户名单全部显示出来. 语法: last (选项 ...
- python发送smtp 邮件 图片
#-*- coding: utf-8 -*- # python2 import os import time import random import smtplib from time import ...
- ☆ [ZJOI2006] 书架 「平衡树维护数列」
题目类型:平衡树 传送门:>Here< 题意:要求维护一个数列,支持:将某个元素置顶或置底,交换某元素与其前驱或后继的位置,查询编号为\(S\)的元素的排名,查询排名第\(k\)的元素编号 ...