m0_61849826 2021-11-27 11:19 采纳率: 100%
浏览 38
已结题

C++浮点数运算精度缺失,求解决.

在double类型的精度问题上遇到困难.

img

代码如下:

#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
char tmp[128];
int getPoint(char *a,int &index){
    for(index;index < 128;index++){
        if(a[index] == '.') return index;
    }//找到小数点位置
}
double transformToDouble(char *a, int index){
    double result = 0;
    if(index == 0){
    for(int i = 1; i < strlen(a)+1; i++){
        result += (a[i] -'0')* pow(10,index-i);
        }
    }
    else{for(int i = 0; i < strlen(a); i++){
        if(i < index) result += double(a[i]-'0')*(pow(10,index - i -1));
        if(i > index) result += double(a[i]-'0')*(pow(10,index - i));
        }}
    return result;
}//将字符串转换为double类型
char* returnChar(double num){
    int inter = num, level = 0;
    while(inter != 0){
        inter /= 10; level++;
    }
    inter = num;
    tmp[level] = '.';
    for(int i = level - 1; i >= 0; i--){
        tmp[i] = inter % 10 +'0';
        inter /= 10;
    }//将整数部分转换为字符串
    double flo = num - (int)num;
    if(flo == 0) return tmp;
    else{
        /*int i = level + 1;
        while(flo != 0){
            int a = flo * 10;
            tmp[i] = a+'0';
            flo = flo*10-a;*/
            //需要补充,未解决在小数点后double类型运算的精度缺失问题,会出现1.3+1.4=2.6999999的现象,导致结果错误
        }
        return tmp;
    }
}
int indexA = 0,indexB = 0;
void add_float(char* a, char* b, char* res) {
    getPoint(a,indexA);
    getPoint(b,indexB);
    double a1 = transformToDouble(a,indexA);
    double b1 = transformToDouble(b,indexB);
    strcpy(res,returnChar(a1+b1));
}

int main()
{
    char num1[128], num2[128], res[128];
    cin >> num1;
    cin >> num2;
    add_float(num1, num2, res);
    cout << res << endl;
    return 0;
}


  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 12月5日
    • 修改了问题 11月27日
    • 创建了问题 11月27日

    悬赏问题

    • ¥15 esp32驱动GC9A01循环播放视频
    • ¥15 惠普360g9的最新bios
    • ¥30 这个功能用什么软件发合适?
    • ¥60 微信小程序,取消订单,偶尔订单没有改变状态
    • ¥15 用pytorch实现PPO算法
    • ¥15 关于调制信号的星座图?
    • ¥30 前端传参时,后端接收不到参数
    • ¥15 这是有什么问题吗,我检查许可证了但是显示有呢
    • ¥15 机器学习预测遇到的目标函数问题
    • ¥15 Fluent,液体进入旋转区域体积分数不连续