豆瓣小站维护:【代码review】数据结构与算法分析(C++) 1.3题

本文深入探讨了double类型运算的精度控制方法,详细解释了浮点数在内存中的表示方式及其对运算结果的影响。通过提供具体实例,帮助读者理解并解决double类型数据处理中的常见精度问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//-------------------------1_3.cpp
//problem:double类型运算的精度如何控制,总是有误差;对浮点数在内存中如何表示及运算,还没有特别清晰理性的认识。
 
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
using namespace std;
 
void printDigit(int n)                   //唯一的I/O处理函数,打印单个整数
{  
 printf("%d", n);
}
 
void printInt(double num)        //打印double数的整数部分
{
 
if (abs(num) >= 10)
        {
            printInt(num/10);
        }
        printDigit((int)num%10);
}
 
void printOut(double num,int n)        //完整的处理double数的函数,第二个参数为小数位
{
if(num<0)
printf("-");                    //符号处理
printInt(abs(num));            //先打印整数部分
printf(".");
        double numDic;
        if(num<0)
    numDic=(long)num-num;
        else
    numDic=num-(long)num;         //计算小数部分
double numshift=pow(10.0,n);
numDic=floor(numDic * numshift + 0.5) / numshift;             //四舍五入,保留小数部分的原有的小数位
        numDic*=pow(10,n);                    //将小数部分化为整数
printInt(numDic);                         //打印小数部分
    }
 
int main()
{
    printOut(-9876.5432f,4);
system("pause");
return 0;
}
 

转载于:https://www.cnblogs.com/liangchu/archive/2012/12/28/2836983.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值