zoukankan      html  css  js  c++  java
  • 7-18 二分法求多项式单根 (20分)

    1、停止循环条件一定是0.001,如果写0.01则结果就不够精确

    2、不在端点且中点值也不为0时,输出近似根

    #define _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    #include <iomanip>
    using namespace std;
    
    float cal(float a3, float a2, float a1, float a0, float x) {
        return a3 * x * x * x + a2 * x * x + a1 * x + a0;
    }
    
    int main(void) {
        float a3, a2, a1, a0; // 系数
        float a, b, mid; // 区间端点值和中点值
        float fa, fb, fmid=-1; // 用来存储端点函数值以及中点函数值
        cin >> a3 >> a2 >> a1 >> a0;
        cin >> a >> b;
        while (b - a >= 0.001) { // 这里一定要写上0.001,如果写0.01近似值会出错
            fa = cal(a3, a2, a1, a0, a);
            fb = cal(a3, a2, a1, a0, b);
            mid = (a + b) / 2;
            if (fa * fb < 0) {
                fmid = cal(a3, a2, a1, a0, mid);
                if (fmid == 0) {
                    cout << setiosflags(ios::fixed) << setprecision(2) << mid;
                    break;
                }
                else if (fa * fmid > 0) { // 中点函数值和左端点函数值同号
                    a = mid;
                }
                else if (fb * fmid > 0) { // 中点函数值和右端点函数值同号
                    b = mid;
                }
            }
            else if (fa * fb == 0) { // 根在端点处
                if (fa == 0) {
                    cout << setiosflags(ios::fixed) << setprecision(2) << a;
                    break;
                }
                else {
                    cout << setiosflags(ios::fixed) << setprecision(2) << b;
                    break;
                }
            }
        }
        if (fmid != 0 && fa * fb != 0)  // 不在端点且中点值也不为0时,输出近似根
            cout << setiosflags(ios::fixed) << setprecision(2) << mid;
        return 0;
    }
  • 相关阅读:
    Haproxy 【转载】
    Nginx介绍
    Day 13 进程和线程
    运维第一课
    面试bb
    Day 12 字符串和正则表达式
    Day 11 文件和异常
    Day10 图形用户界面和游戏开发
    Day9 面向对象进阶
    day8 面向对象编程基础
  • 原文地址:https://www.cnblogs.com/letwant/p/14307947.html
Copyright © 2011-2022 走看看