文档章节

GCC中printf四舍五入的原则

莫忆往西
 莫忆往西
发布于 2016/08/13 00:08
字数 269
阅读 33
收藏 0

###GCC中printf四舍五入的原则

  • VC++ is using Round half away from zero

  • GCC is using Round half to even which is also known as banker's rounding.

  • Nearest integer function In computer science, the nearest integer function of real number x denoted variously by Round(x), is a function which returns the nearest integer to x. To avoid ambiguity when operating on half-integers, a rounding rule must be chosen. On most computer implementations, the selected rule is to round half-integers to the nearest even integer—for example,

Test Program on gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.2)

#include <iostream>
#include <vector>
#include <stdio.h>
#include <algorithm>

using namespace std;

void printVector(float& elem)
{
    printf("value %f is change to %0.1f \n", elem, elem);
}

void testRoundRules()
{
    cout << "using gcc" << endl;

    float fValues[] = { 3.05f, 3.15f, 3.151f, 3.155f, 3.25f, 3.251f, 3.255f, -0.45f, -0.15f};
    // 使用vector的构造函数,将数组第一个元素开始到结束的内容拷贝到vector中
    vector<float> vDatas(fValues, fValues+sizeof(fValues)/sizeof(fValues[0]));
    
    for_each(vDatas.begin(), vDatas.end(), printVector);
}

output:

using gcc
value 3.050000 is change to 3.0
value 3.150000 is change to 3.2
value 3.151000 is change to 3.2
value 3.155000 is change to 3.2
value 3.250000 is change to 3.2
value 3.251000 is change to 3.3
value 3.255000 is change to 3.3
value -0.450000 is change to -0.4
value -0.150000 is change to -0.2
Note that 3.251 is rounding to 3.3 not 3.2, because 3.3 is nearer to 3.251.

© 著作权归作者所有

共有 人打赏支持
上一篇: 安装openssh
莫忆往西
粉丝 2
博文 14
码字总数 17277
作品 0
西安
私信 提问
java保留小数点后四舍五入的问题

在Java中使用一些方法进行四舍五入会出现和预期不同的结果,这是因为这些方法使用的原则实际为:四舍六入五考虑,五后非零就进一,五后皆零看奇偶,五前为偶应舍去,五前为奇要进一。 1.四舍...

塞上名猪
2017/10/11
0
0
awk之printf详解

printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出信息。在编写程序时经常会用到此函数。printf()函数的调用格式为: printf("", ); 其中格式化字符串包括两部分内容: 一部...

如风达
2016/09/01
8
0
在gcc中使用intel风格的内联汇编

很简单,内联汇编使用asm(“.intel_syntax noprefix/n”)声明一下,以后的内联汇编就可以用intel风格了,构建可执行文件时给gcc加上-masm=intel参数。 先写一个小程序测试一下: [cpp] view...

simpower
06/21
0
0
Linux编译工具:gcc入门

1. 什么是gcc gcc的全称是GNU Compiler Collection,它是一个能够编译多种语言的编译器。最开始gcc是作为C语言的编译器(GNU C Compiler),现在除了c语言,还支持C++、java、Pascal等语言。...

zjy900507
05/09
0
0
c 语言条件编译

指令 用途 # 空指令,无任何效果 #include 包含一个源代码文件 #define 定义宏 #undef 取消已定义的宏 #if 如果给定条件为真,则编译下面代码 #ifdef 如果宏已经定义,则编译下面代码 #ifnde...

双月通天
2015/12/02
68
0

没有更多内容

加载失败,请刷新页面

加载更多

浅析微信支付:开通免充值产品功能及如何进行接口升级指引

本文是【浅析微信支付】系列文章的第十五篇,主要讲解如何开通免充值产品功能流程和其中的注意事项,对于接口升级会重要讲解,避免爬坑。 浅析微信支付系列已经更新十五篇了哟~,没有看过的...

YClimb
47分钟前
2
0
看看ArrayDeque源码

之前看了其他实现Deque接口的类,这里再看看ArrayDeque吧,下图可以看到这个类设计的结构层次,其实Deque接口是继承了Queue接口的。用可调整大小的数组实现Deque接口。没有容量限制,他们根据...

woshixin
47分钟前
2
0
如何存储登录cookie,发送一个post类型的api请求?

其实发送post请求和get请求一样,主要就是不知道如何存储登录cookie进行发送请求,请教xx得到如下解决办法 点击右下方的cookies,填写cookies信息,如图 1填写登录的cookie名,2填写cookie的...

七曦777
47分钟前
1
0
利用cefSharp实现网页自动注册登录的需要注册的一些事项

最近朋友有个需要自动注册登录点击的事,我帮着写了写,好久没写过这东西了,在写的过程中总结了需要注意的一些事项。 一、换IP之后要测试一下速度,我目前用的最简单的测试方法就是20-30秒加...

我退而结网
56分钟前
2
0
Go语言中使用 BoltDB数据库

boltdb 是使用Go语言编写的开源的键值对数据库,Github的地址如下: https://github.com/boltdb/bolt boltdb 存储数据时 key 和 value 都要求是字节数据,此处需要使用到 序列化和反序列化。...

Oo若离oO
56分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部