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.

时间: 2024-12-27 16:13:46

GCC中printf四舍五入的原则的相关文章

c#中的四舍五入

在处理一些数据时,我们希望能用“四舍五入”法实现,但是C#采用的是“四舍六入五成双”的方法,如下面的例子,就是用“四舍六入五成双”得到的结果: double d1 = Math.Round(1.25, 1);//1.2double d2 = Math.Round(1.24, 1);//1.2double d3 = Math.Round(1.26, 1);//1.3double d4 = Math.Round(1.35, 1);//1.4 为了用C#来实现“四舍五入”,我写了下面的函数: 代码 /

GCC中的堆栈保护机制

以堆栈溢出为代表的缓冲区溢出已成为最为普遍的安全漏洞,由此引发的安全问题比比皆是.我们知道攻击者利用堆栈溢出漏洞时,通常会破坏当前的函数栈.在gcc中,通过编译选项可以添加 函数栈的保护机制,通过重新对局部变量进行布局来实现,达到监测函数栈是否非破坏的目的. gcc中有3个与堆栈保护相关的编译选项 -fstack-protector:启用堆栈保护,不过只为局部变量中含有 char 数组的函数插入保护代码. -fstack-protector-all:启用堆栈保护,为所有函数插入保护代码. -fn

GCC 中 -L、-rpath和-rpath-link的区别

GCC 中 -L.-rpath和-rpath-link的区别 来源 http://blog.csdn.net/q1302182594/article/details/42102961 关于这3个参数的说明,有不少资料,但是看完了还是觉得模糊,分不清它们的区别.本文将用实验的方法去探讨这3个参数的区别. 1.三个.c文件 1.1 world.c #include<stdio.h> void world(void) { printf("world.\n"); } 1.2 hel

GCC中的弱符号与强符号

我们经常在编程中碰到一种情况叫符号重复定义.多个目标文件中含有相同名字全局符号的定义,那么这些目标文件链接的时候将会出现符号重复定义的错误.比如我们在目标文件A和目标文件B都定义了一个全局整形变量global,并将它们都初始化,那么链接器将A和B进行链接时会报错: [html] view plain copy 1 b.o:(.data+0x0): multiple definition of `global' 2 a.o:(.data+0x0): first defined here 这种符号的

运算中的四舍五入

场景描述:在计算机的世界里面是没有任何的四舍五入的法则,如果我们需要达到这种效果,我们不得不自己实现这种古老的运算模式,如下: 已知变量f为float类型,i为int类型,以下表达式语句中能够实现将f中的数值保留小数点后两位,第三位进行四舍五入运算 f=(int)(f*100+0.5)/100.0; 非常巧妙的利用了0.5这个简单的计算法则,现在就可以实现四舍五入了,如果小数点后面小于0.5加上0.5自然是被省略,除非相反了,所以结果如上. 运算中的四舍五入,布布扣,bubuko.com

CSS中的样式覆盖原则

规则一:由于继承而发生样式冲突时,最近祖先获胜(最近原则).CSS的继承机制使得元素可以从包含它的祖先元素中继承样式,考虑下面这种情况: <html> <head> <title>rule 1</title> <style> body {color:black;} p {color:blue;} </style> </head> <body> <p>welcome to <strong>

linux 中printf的使用

linux 中printf的使用printf "helloworld\n"printf 中换行必须加上\n printf '%d %s\n' 1 "abc" [email protected]:~/linux$ a=2[email protected]:~/linux$ printf 'a is %s\n' $aa is 2 使用printf结合变量的使用

设计模式中的六大设计原则之三,四

求二叉树的宽度和深度 给定一个二叉树,获取该二叉树的宽度和深度. 例如输入 a / \ b c / \ / \ d e f g 返回3. 详细描述: 接口说明 原型: int GetBiNodeInfo(BiNode &head, unsigned int *pulWidth, unsigned int *pulHeight) 输入参数: head 需要获取深度的二叉树头结点 输出参数(指针指向的内存区域保证有效): pulWidth 宽度 pulHeight 高度 返回值: 0 成功 1 失败

GCC中初始化函数是如何被处理的?

本文译至: http://gcc.gnu.org/onlinedocs/gccint/Initialization.html 如我们所知,在GCC通过给代码追加__attribute__((constructor))和__attribute__((destructor))的方式可以追加初始函数和终止函数, 这篇文章介绍了GCC内部是如何实现上述处理的. 简单的说,就是在最经常的情况下,初始函数会被追加到.ctor section中,.init会调用对应的函数处理这些初始函数.终止情况类似. --