C++ Builder 串口控件 | C++ Builder 编程技巧 | C++ Builder 操作指南 | C++ Builder 参考手册 | 基础知识 | cfloat 浮点数 | cmath 数学函数 | • acos, acosf, acosl | • acosh, acoshf, acoshl | • asin, asinf, asinl | • asinh, asinhf, asinhl | • atan, atanf, atanl | • atan2, atan2f, atan2l | • atanh, atanhf, atanhl | • ceil, ceilf, ceill | • copysign, copysignf, copysignl | • cos, cosf, cosl | • cosh, coshf, coshl | • exp, expf, expl | • exp2, exp2f, exp2l | • expm1, expm1f, expm1l | • fabs, fabsf, fabsl | • floor, floorf, floorl | • fmod, fmodf, fmodl | • frexp, frexpf, frexpl | • hypot, hypotf, hypotl | • ldexp, ldexpf, ldexpl | • log, logf, logl | • log10, log10f, log10l | • log1p, log1pf, log1pl | • log2, log2f, log2l | • modf, modff, modfl | • nan, nanf, nanl | • poly, polyl | • pow, powf, powl | • pow10, pow10l | • round, roundf, roundl | • sin, sinf, sinl | • sinh, sinhf, sinhl | • sqrt, sqrtf, sqrtl | • tan, tanf, tanl | • tanh, tanhf, tanhl | • trunc, truncf, truncl | • _exception, _exceptionl | • _matherr, _matherrl | • HUGE_VAL, HUGE_VALF, HUGE_VALL, _LHUGE_VAL | • EDOM, ERANGE | • _mexcep, DOMAIN, SING, OVERFLOW, UNDERFLOW, TLOSS, PLOSS, STACKFAULT | • M_E, M_LOG2E, M_LOG10E, M_LN2, M_LN10 | • M_PI, M_PI_2, M_PI_4, M_1_PI, M_2_PI, M_1_SQRTPI, M_2_SQRTPI | • M_SQRT2, M_SQRT_2 | • DOMAIN error 定义域错误 | cstdlib 标准库函数 | System 字符串 | System 日期和时间 | System.Math.hpp 数学函数 | 其他数据类型 | VCL 基础类 | VCL 应用程序 | Pictures 图片 | Graphics 绘图 | Additional 控件 | System 控件 | A ~ Z 字母顺序排列的目录 | 网友留言/技术支持 |
|
poly, polyl - 求 n 次函数横坐标 x 位置的纵坐标值:y = cnxn + cn-1xn-1 + ... + c2x2 + c1x + c0 |
函数原型:
函数原型 |
Turbo C/C++
Borland C++ |
C90 |
C99 |
C++98 |
C++11 |
double poly(double x, int n, double c[]); |
√ |
|
|
|
|
long double polyl(long double x, int n, long double c[]); |
√ |
|
|
|
|
头文件:
#include <cmath>
命名空间:
std
参数:
x:浮点数,横坐标值
n:整数,n 次函数
c:函数的参数,包含 n + 1 个浮点数的参数数组,这个 n 次函数的参数为 c[n] ~ c[0]
返回值:
这个 n 次函数的横坐标 x 位置的纵坐标值 y = c[n]*xn + c[n-1]*xn-1 + ... + c[2]*x2 + c[1]*x + c[0]
NAN:定义域错误,此时全局变量 errno 的值为 EDOM。
计算可能会溢出,此时全局变量 errno 的值为 ERANGE。
例子:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
const int n = 5;
double c[n+1] = { 2.5, -3.6, 8.9, -5.1, 4.8, -6.2 };
double x = 12.3;
double y = std::poly(x, n ,c);
Memo1->Lines->Add(L"y = " + FloatToStr(y));
double w = c[5] * std::pow(x, 5)
+ c[4] * std::pow(x, 4)
+ c[3] * std::pow(x, 3)
+ c[2] * std::pow(x, 2)
+ c[1] * x
+ c[0];
Memo1->Lines->Add(L"w = " + FloatToStr(w));
} |
兼容性:
poly 和 polyl 是从 Turbo C / Turbo C++ / Borland C++ 兼容过来的函数,不是标准 C/C++ 函数。
从测试结果,即下面的表格来看,Embarcadero 已经抛弃这个函数了。
如果以前的程序使用了这个函数,并且需要编译为 64 位应用程序,需要按照规则自己写一个函数了。
相关链接:
• pow10 • _matherr • 浮点数异常处理
|
|
|
|