码迷,mamicode.com
首页 > 其他好文 > 详细

GCC中printf四舍五入的原则

时间:2016-08-13 01:06:14      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:

 

  • 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.

GCC中printf四舍五入的原则

标签:

原文地址:http://www.cnblogs.com/aquar/p/5767000.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!