关于 pow 浮点精度丢失

简介: /* 寝室学弟问我一个很简单的问题,就是把一个数逆序后输出的字符串转换为数值,学弟用了pow这个很常见的函数,代码逻辑没有问题,但是不理解为什么答案是错的,而且只差1或者2;在小蒙的帮助下,才开始意识到pow 精度丢失的问题.一查 cplusplus.com 才发现 如下问题: double pow ( double base, double expo
/*  寝室学弟问我一个很简单的问题,就是把一个数逆序后输出的字符串转换为数值,
学弟用了pow这个很常见的函数,代码逻辑没有问题,但是不理解为什么答案是错的,
而且只差1或者2;在小蒙的帮助下,才开始意识到pow 精度丢失的问题.
一查 cplusplus.com  才发现 如下问题:
    double pow (      double base,      double exponent );
long double pow ( long double base, long double exponent );
      float pow (       float base,       float exponent );
     double pow (      double base,         int exponent );
long double pow ( long double base,         int exponent );
 pow函数不存在pow(int int),也就是说输入的pow(10,n)中的10 会先转换为double
  这样一来数字大了误差就大了 导致了错误;看来平时常用的函数也要注意细节!
  */
#include<stdio.h>
#include <math.h>
int a[1000];
int main()
{
    int i,x,n=0,t,sum=0,j=0;
    scanf("%d",&i);
    x=i;
    printf("逆序为:");
    while(x)
    {
        t=x%10;
        printf("%d",t);
        a[j++]=t;
        x/=10;
    }
    printf("\n");
    /*
    for(int i = 0; i<j; i++)
        sum = sum*10+a[i];
    */
     while(j>=0)
     {
         --j;
         sum+=a[j]*((int)(pow(10,n)+0.5));   //这里如果不加0.5进行四舍五入int强转 会导致精度丢失
         n++;
     }
    printf("sum=%d\n",sum);
    return 0;
}


目录
相关文章
|
8月前
LabVIEW为什么浮点数会丢失精度
LabVIEW为什么浮点数会丢失精度
75 2
|
8月前
|
语音技术 Python
量化模型是将浮点数运算转换为整数运算的过程
【2月更文挑战第32天】量化模型是将浮点数运算转换为整数运算的过程
72 1
|
8月前
|
存储 编译器 C语言
魔性的float浮点数精度问题
魔性的float浮点数精度问题
69 0
|
C++
C++中浮点数据的精度输出控制?
C++中浮点数据的精度输出控制?
103 0
float与double精度丢失问题
float与double精度丢失问题
132 0
|
算法
【计组】32位浮点数的表示范围以及如何解决精度缺失
【计组】32位浮点数的表示范围以及如何解决精度缺失
550 0
【计组】32位浮点数的表示范围以及如何解决精度缺失
|
存储 Java 关系型数据库
100. BigDecimal一定不会丢失精度吗
100. BigDecimal一定不会丢失精度吗
128 0
100. BigDecimal一定不会丢失精度吗
|
存储
浮点数比较的精度问题
浮点数比较的精度问题
177 0
浮点数比较的精度问题

热门文章

最新文章