本文使用C++语言书写,对于C的小伙伴们,如果编译不通过的话……就说明C里面没有这个内容,可以跳过

通常来说,我们书写程序主要只用整形变量

(signed/unsigned) (long/long long/short) int a;

但是有时候,我们又需要一些小数运算。

所以就会出现

float b;
double c;
long double d;

至于具体使用方法……自行度娘。这里需要注意一下浮点数是有精度的

计算机中的数据是用二进制存储的。

十进制小数怎么转换为二进制小数呢?

举个栗子

\[(0.5)_{10} = (0.1)_2 \\
(0.25)_{10} = {0.01}_2
\]

我们是怎么知道的呢?

推理一下,

\[(0.5)_{10} \times (2)_{10} = (1)_{10}
(0.5)_{10} = (1)_{10} \div (2)_{10} = (1)_2 \div (10)_2 = (0.1)_2
\]

然后再根据以下度娘的方法,对于十进制小数,每次乘以2,然后取整数位(0/1),就可以得到二进制下的小数

比如



但是我们也要知道,并不是所有小数乘以2的有限次幂就能得到整数的

比如\((0.8)_{10}\),如果小伙伴们自行转换一下,就会发现\((0.8)_{10} = (0.110011001100\dots)_2\)

是不是无限循环?

但是计算机也不能无限表示啊

他就只能截断到某一位,这就会产生精度误差

比如,\((0.8)_{10}\)在计算机中存储的是\((0.110011001100)_2\),当然实际上他存储的位数更多,所以误差更小

那么\((0.110011001100)_2\)转换回十进制就是(好难算啊)

\[(0.110011001100)_2 = (1 \times 2^{-1} + 1 \times 2^{-2} + 0 \times 2^{-3} + 0 \times 2^{-4} + \dots)_{10} = (0.79980468750000000000)_{10}
\]

这个误差就是这样产生的。但是一般输出的时候由于误差太小,都会给你四舍五入。

这就是为什么很多题都是叫你保留三位小数,因为float三位之后就会有误差,对于不同的方法输出的结果不同。


那么对于浮点数的输出格式,也很简单啦

我们可以

printf("%.3f", x);

这里.3其实就是0.3, 表示。。。表示

也可以

cout << fixed << setprecision(3);
cout << x << endl;

这里fixed是强制小数输出,否则的话……你可能会看到3.42344856131e-31这样的结果,其实他是精度误差下的0

setprecision(int)就是设置从此以后cout输出的数据都带有int位小数位,不足补0

C/C++中浮点数输出精度的问题的更多相关文章

  1. jmeter 中 浮点数计算精度问题

    jmeter 中 浮点数计算精度问题解决方法: 编写 beanshell 时使用 java.math.BigDecimal 方法构造,使用 BigDecimal 并且一定要用 String 来够造. ...

  2. 【转】QT中QDataStream中浮点数输出问题

    先上代码: C/C++ code   ? 1 2 3 4 5 6 7 8 9 10 11 12 13 int main(int argc, char *argv[]) {     QApplicati ...

  3. Java中浮点数的精度问题 【转】

    当您在计算Money的时候,请看好了!!!要不损失了别后悔!!! 现象1: public static void main(String[] args) { System.out.println(0. ...

  4. 计算价格, java中浮点数精度丢失的解决方案

    计算价格, java中浮点数精度丢失的解决方案

  5. Java 中的浮点数取精度方法

    Java 中的浮点数取精度方法 一.内容 一般在Java代码中取一个double类型的浮点数的精度,四舍五入或者直接舍去等的方式,使用了4种方法,推荐使用第一种,我已经封装成工具类了. 二.代码实现 ...

  6. 当向计算机中存入一个float类型的数值2.2 后,在从计算机中读出输出,这时2.2 的值已经发生了变化(转)

    problom : 'f1' value hava been changed when output. reason : the binary repersentation of 2.2f is : ...

  7. java中浮点数的比较(double, float)(转)

    问题的提出:如果我们编译运行下面这个程序会看到什么? public static void main(String args[]){ System.out.println(0.05+0.01); Sy ...

  8. Python的浮点数损失精度问题

    本篇讨论的现象可以从下面这段脚本体现出来: >>> x = 0.0 >>> for i in range(10): x += 0.1 print(x) 0.1 0. ...

  9. C/C++中浮点数输出格式问题

    在C语言中,浮点数的输出格式有三种:%g, %f, %e 首先要说的是%e是采用科学计数法来显示. %g与后两者有一个重要的差别,就是设置输出精度的时候,(C中默认浮点输出精度是6),%g认为,包括整 ...

随机推荐

  1. 浅谈一种浮标浮岛式水质监测“智能哨兵”助力水质监测,多环境应用ke轻松测水!

    浮岛式水质监测站能够在实际使用中,安装方便,能够采集多种参数,溶解氧  氨氮  电导率  盐分 pH值  COD  水位  节省时间和人工,浮标水质监测站是设立在河流.湖泊.水库.近岸海域等流 域内的 ...

  2. js根据日期获取所在周

    一.获取时间所在周的周一.周五 function getFirstLastDay (time) { let date = new Date(time) let Time = date.getTime( ...

  3. UVA 1572 Self-Assembly(拓扑排序)

    1 // 把一个图的所有结点排序,使得每一条有向边(u,v)对应的u都排在v的前面. 2 // 在图论中,这个问题称为拓扑排序.(toposort) 3 // 不难发现:如果图中存在有向环,则不存在拓 ...

  4. 3.8学习总结——Android保存信息

    为了保存软件的设置参数,Android平台为我们提供了一个SharedPreferences接口,它是一个轻量级的存储类,特别适合用于保存软件配置参数.使用SharedPreferences保存数据, ...

  5. 【PHP】数组按照字母排序

    /** * 将数组按字母A-Z排序 * @return [type] [description] */ private function chartSort($list) { // $user=$th ...

  6. Jmeter系列(20)- 录制控制器

    作用:相当于对录制的脚本进行分组存放,放在同一个线程组里面:录制脚本的时候,选择线程组下面想要存放的录制控制器中

  7. quicksort 快速排序 quick sort

    * Java基本版 package cn.mediamix; import java.util.LinkedList; public class QuickSort { public static v ...

  8. 给你一个app,怎么测试

    安装卸载 安装卸载路径是否能自己选择,在不同操作系统下(Android.ios)安装是否正常,能正常运行,安装的文件及文件夹是否写入了指定的目录里,安装来自不同来源的(应用宝.360助手)下是否正常. ...

  9. nginx 利用return实现301跳转

    第一种: server { location / { rewrite ^/(.*)$ http://www.baidu.com/$1 permanent; } } 第二种: server { loca ...

  10. 『Python』整洁之道

    1. 使用 assert 加一层保险 断言是为了告诉开发人员程序中发生了不可恢复的错误,对于可以预料的错误(如文件不存在),用户可以予以纠正或重试,断言并不是为此而生的. 断言用于程序内部自检,如声明 ...