一道计算一元二次方程解的算法题
2016-06-22 22:05
375 查看
今天在群里有人求助一道求解一元二次方程的题目。尝试着写了一下,发现还挺容易犯错了。调试了几次总算OK了
题目如下
解法如下:
计算结果如下
难度不算很高,,但是特别容易犯错。尤其是初值X为0的情况下可能遇到的情况。由于为了减少开销没有多次调用pow函数,而是自己写的累积乘积,特别容易出错。
好在调试几次总算OK了。
题目如下
解法如下:
#include <iostream> double processData(double x, double *a, double*b, int count); //calc the formula //f(x)=a[0]* x^0 + a[1] * x^1 + ... + a * x^n = 0 double calcFormula(double *a, int count) { if (count <= 0) return 0; //calc the f`(x) double * b = new double[count + 1]; for (int i = 0; i <= count; ++i) b[i] = a[i] * i; double orgX = 0; double x = processData(orgX, a, b, count); while (abs(x - orgX) > 0.00001) { orgX = x; x = processData(orgX, a, b, count); } delete[] b; return x; } double processData(double x, double *a, double*b, int count) { double fax = 0, fbx = 0; double product = 1; for (int i = 0; i <= count; ++i) { fbx += (b[i] * ((i <= 1) ? 1 : product)); product *= ((i == 0) ? 1 : x); fax += (a[i] * product); } return (x - fax / fbx); } int main() { double a[] = { 1, -2.5, 0, 1 }; int n = 3; std::cout << calcFormula(a, n) << std::endl; return 0; }
计算结果如下
难度不算很高,,但是特别容易犯错。尤其是初值X为0的情况下可能遇到的情况。由于为了减少开销没有多次调用pow函数,而是自己写的累积乘积,特别容易出错。
好在调试几次总算OK了。
相关文章推荐
- 2016第25周三
- nginx 502 错误
- java死锁代码示例
- jQuery——jquery.fn.extend与jquery.extend
- 利用VS编译libiconv库
- Excel宏教程 (宏的介绍与基本使用)
- c语言题目
- 三大产业概况
- 学习SQLite之路(四)
- 347. Top K Frequent Elements
- 07.Java 集合 - HashTable
- win7 VMware SVGA 3D驱动
- 【Android】PropertyAnimation属性动画
- Expression基础体验
- codeforces228ABC
- 承诺,项目管理中的大杀器
- 11
- LeetCode-1- Two Sum
- leetcode笔记-House Robber
- Hive metastore database is not initialized. Please use schematool (e.g. ./schematool -initSchema -db