C语言陷阱:浮点运算
在Stack overflow上看到这样一个问题。
计算如下表达式的值:
P=(1/2-3/4)*(5/6-7/8)*…*[n/(n-1) - (n+2)/(n+3)].
程序如下:
#include<stdio.h>
int main ()
{
float s, p = 1.0;
int i, n;
printf("Put a number:");
scanf("%d", &n);
for (i = ; i <= n; i=i+) {
p *= ((i)/(i+)-(i+)/(i+));
}
printf("\n p=%f", p);
}
运行之后不管n为何值,p的值都输出为0,为什么?
初看好像程序没什么问题,但仔细想一下发现计算p的表达式p *= ((i)/(i+1)-(i+2)/(i+3))中的i是int型变量,对于i>=1,(i)/(i+1)永远都为0.
所以表达式应该修改为:p *= ((float)(i)/(i+1)-(float)(i+2)/(i+3));
或者 p *= ((i)/(i+1.0)-(i+2.0)/(i+3.0)。学习的时候往往会粗心,不管是学习还是做项目的时候都要认真仔细!培训C++语言的老师说:来博洋的孩子们都是年轻的一代,可不能老糊涂哦!
博洋教育C++培训教师简介:吴耀,C语言讲师
技术特点:掌握Linux 平台下系统开发,熟悉TCP\IP协议及相关应用,掌握socket TCP.LDP网络编程,熟悉C语言,熟练使用Linux操作系统,熟练使用Linux 平台下软件开发工具。
C语言陷阱:浮点运算的更多相关文章
- C语言陷阱——类型转换
以下例子取自<深入理解计算机系统>. 考虑如下的C语言代码: #include<stdio.h> typedef unsigned char* byte_pointer; vo ...
- Golang语言编程规范
Golang语言编程规范 一.说明 编程规范好,可避免语言陷阱,可有利团队协作,有利项目维护. 正常的Go编程规范有两种:编译器强制的(必须的),gofmt格式化非强制的(非必须). Go宣告支持驼峰 ...
- 100本Python精品书籍(附pdf电子书下载)
51本Python精品书籍(附下载)链接: https://pan.baidu.com/s/19ydAKCFxM0plkepXMlqQLg 提取码: nnpe 400集python视频教程下载:链接: ...
- Java C
先说一下自己叫什么,免得面试的人张冠李戴. 介绍自己有几个方面:1学什么专业的那方面学的过硬,可以说的具体点. 2以前做过什么.(这家公司要你肯定是和你的经历有关.) 3现在来这家公司的目的是什么(当 ...
- Python 的经典入门书籍
实python非常适合初学者入门,上手很容易.我就是完全通过网上资源学了python的.最大的是3点经验:1.找一本浅显易懂,例程比较好的教程,从头到尾看下去.不要看很多本,专注于一本.把里面的例程都 ...
- C语言指针的陷阱
C语言指针的陷阱 分类: C/Cpp 转自:http://blog.csdn.net/porscheyin/article/details/3461670 “C语言诡异离奇,陷阱重重,却获得了巨大 ...
- C语言学习书籍推荐《C陷阱与缺陷》下载
下载地址:点我 凯尼格 (作者), 高巍 (译者) <C和C++经典著作:C陷阱与缺陷>适合有一定经验的C程序员阅读学习,即便你是C编程高手,<C和C++经典著作:C陷阱与缺陷> ...
- C语言补漏(1)--- char到int赋值的一个陷阱
作为一个C的新手(虽然学的第一门语言就是C,可是用C实际开发项目却是最近的事情),对使用C过程中遇到的各类问题.疑惑.知识漏洞进行弥补无疑是非常有必要的,于是决定将每次遇到的知识漏洞写到博客上. 今天 ...
- java浮点运算的陷阱
首先呢,i你要明白double和float. Inifinity: 例如:syso(5.0/0.0+" 和"+0.0 /0.0); 浮点运算的0.0不是真正意义上的0,而是非常接近 ...
随机推荐
- JavaScript DOM节点操作总结
节点类型 节点类型主要有三种:元素节点,属性节点和文本节点. 而对DOM的主要也就是围绕元素节点和属性节点的增删改查.下面就分别从对元素节点的操作和对属性节点的操作来介绍. 元素节点 查 在对DOM进 ...
- CSS实现背景透明而背景上的文字图片不透明
1.用图片则能兼容IE8和IE7 2.用颜色则不能兼容IE8和IE7,并且颜色层不能随着内容层自增长,只能设置一个固定高度 3.用颜色则颜色层不能包含内容层(图片和文字) <!-- wrap最外 ...
- Java序列化与反序列化,文件操作
参考两篇博客: http://blog.csdn.net/moreevan/article/details/6697777 http://blog.csdn.net/moreevan/article/ ...
- linux环境下Vim的配置
原文链接:http://blog.chinaunix.net/uid-26826958-id-3272375.html (本文转自此链接中的部分内容,但做了适当修改) 安装vim命令:sudo ap ...
- YII 1.0 发表文章用到的小物件
<?php $form = $this->beginWidget('CActiveForm',array('htmlOptions'=>array('enctype'=>'mu ...
- Angular - - ngApp、ngBind、ngBindHtml、ngNonBindable
对于ng-系列的指令,每篇文章写2-5个吧,不然显得文章好短.... ngApp 使用这个指令自动启动一个AngularJS应用.ngApp指令指定了应用程序的根节点,通常会将ngApp放置在网页的根 ...
- js原生设计模式——4安全的工厂方法模式之oop编程增强版
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- GCD教程(一):基本概念
在网上看到关于GCD的一个很不错的教程,这里做一下转载 原帖地址:http://www.dreamingwish.com/dream-2012/of-of-of-of-gcd-introduced-1 ...
- SVG的基础使用
SVG的基础使用: <%@ page language="java" contentType="text/html; charset=UTF-8" pag ...
- JWPlayer支持SD/HD
First, we have to render two versions of our video: an SD (standard definition) and HD (high definit ...