找到方程的根

Finding roots of an equation

本文关键字:方程      更新时间:2023-10-16

>我正在尝试用C++定义算法,但有一个我无法理解的错误我希望我的算法找到二阶方程的根,并以列表的形式给我解决方案......

我已经定义了nbRacines它给出了根的数量并且它工作正常。所以这是我的定义...

list<float> Racines (float a,float b, float c)
{
    float discr=b*b-4*a*c;
    float li={};
    if (nbRacines(a,b,c)==2)
    {
        li={((-b-sqrt(discr)/2*a),((-b-sqrt(discr)/2*a)))};
    }
    if (nbRacines(a,b,c)==1)
    {
        li={(-b/2*a)};
    }
    return li;
}  

它给出了这个错误...

$ g++ -Wall -pedantic -std=c++0x -c -Werror definitionsFonctions.cpp
definitionsFonctions.cpp: In function ‘std::__cxx11::list<float> 
Racines(float, float, float)’:
`definitionsFonctions.cpp:269:10: error: could not convert ‘li’ from ‘float’ to 
‘std::__cxx11::list<float>’
   return li;
          ^~
Makefile:8: recipe for target 'definitionsFonctions.o' failed
make: *** [definitionsFonctions.o] Error 1

你有一个声明float li的对象,并尝试将其用作函数的返回值。您还可以尝试为其分配一系列值。这将不起作用,并且将使用operator,而不是您想要的。要修复它,请直接返回列表:

std::vector<float> Racines (float a, float b, float c)
{
    float discr=b*b-4*a*c;
    switch(nbRacines(a,b,c))
    {
        case 2: return {-b-sqrt(discr)/2*a, -b-sqrt(discr)/2*a};
        case 1: return {-b/2*a};
        throw std::logic_error("quadratic equations have two roots");
    }
}  

算术注释1:所有二次方程都有两个根,有些只有两个相等的根

算术注释2:我认为您的意思是将-b+sqrt(discr)/2*a作为两个元素列表的元素之一返回

样式说明:std::vector 是比 std::list 更好的默认容器。仅当需要list属性(缺少引用失效)时,才应使用。