首页 > 解决方案 > 将 int 转换为 double 会丢失精度吗?

问题描述

我正在尝试一个非常简单的程序,并且当 int 转换为 double 时,我不理解明显的精度损失。

void collinear(int x1, int y1, int x2,  
               int y2, int x3, int y3) 
{ 
 
    int a = (x1 * (y2 - y3)) +  
            (x2 * (y3 - y1)) +  
            (x3 * (y1 - y2)); 
  
    if (a == 0) 
        cout << "Yes"; 
    else
        cout << "No"; 
} 

这是带有double

void collinear(double x1, double y1, double x2,  
               double y2, double x3, double y3) 
{ 

    double a = (x1 * (y2 - y3)) +  
            (x2 * (y3 - y1)) +  
            (x3 * (y1 - y2)); 
  
    if (a == 0.0) 
        cout << "Yes"; 
    else
        cout << "No"; 
} 

鉴于此输入,这两个程序的行为不同,我不明白为什么

collinear(0,0,94911150,94911151,94911151,94911152); 

双打节目:是的

带整数的程序:


用纯数学计算的答案也是No. 双打的程序是否会失去精度?

标签: c++

解决方案


推荐阅读