struct_cym 2021-09-08 22:40 采纳率: 0%
浏览 17

c++算一次函数的代码,for循环出了一些奇怪的情况

如果我把for设为a+=0.1,b+=0.1,他就无法输出一些样例
而a+=0.5,b+=0.5却可以


#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
double x,y;    //第一个点 
double xt,yt;    //第二个点
int pe;    //一次函数是否过原点,过原点为1,不过原点为0 

//默认数据有效

int main(){
    while(cin>>pe){    //先判断函数是否是正比例函数 
        if(pe==1){
            cin>>x>>y;     //正比例函数只要一个坐标就行了 
            double ans;
            ans=x/y;
            cout<<"x="<<ans<<"y";
            continue;
        }else{
            cin>>x>>y>>xt>>yt;    //一次函数需要两个坐标 
            double ansa,ansb;    //分别是y=a*x+b 
            for(double a=-2000;a<=2000;a+=0.5){    //a
                for(double b=-2000;b<=2000;b+=0.5){    //b
                    if(a*x+b-y==0&&a*xt+b-yt==0){
                        ansa=a;
                        ansb=b;
                        if(b<0){
                            if(ansa==-1){    //特判1,-1的特殊形式 
                                cout<<"x="<<"-y-"<<abs(b)<<endl;
                                break;        
                            }else if(ansa==1){
                                cout<<"x="<<"y-"<<abs(b)<<endl;
                                break;
                            }
                            cout<<"x="<<ansa<<"y-"<<abs(b)<<endl;
                            break;
                        }else{    //特判 1,-1的特殊形式 
                            if(ansa==-1){
                                cout<<"x="<<"-y+"<<abs(b)<<endl;
                                break;        
                            }else if(ansa==1){
                                cout<<"x="<<"y+"<<abs(b)<<endl;
                                break;
                            }
                            cout<<"x="<<ansa<<"y+"<<abs(b)<<endl;
                            break;
                        }
                        continue;
                    }
                }
            }
        }
    }
}
  • 写回答

1条回答 默认 最新

  • Pliosauroidea 2021-09-08 22:46
    关注

    先怀疑是精度问题
    因为指数形式的0.5恰好是2*e^-1,但是0.1在二进制下除不尽,所以有可能是精度累加的问题
    你可以打印对应值出来看一下

    评论

报告相同问题?

问题事件

  • 创建了问题 9月8日

悬赏问题

  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Linux权限管理相关操作(求解答)
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表
  • ¥15 DbVisualizer Pro 12.0.7 sql commander光标错位 显示位置与实际不符
  • ¥15 求一份STM32F10X的I2S外设库
  • ¥15 android 打包报错
  • ¥15 关于stm32的问题
  • ¥15 ncode振动疲劳分析中,noisefloor如何影响PSD函数?