Текст подпрограммы и версий pa06r_c.zip pa06d_c.zip |
Тексты тестовых примеров tpa06r_c.zip tpa06d_c.zip |
Вычисление значения непрерывной дроби.
pa06r_c вычисляет значение суммы N звеньев непрерывной дроби
fN = b0 + a1 / ( b1 + a2 / ( b2 + ... + aN / ( bN )...) ) .
real pa06r_c (real *b0, real *a, real *b, integer *n)
Параметры
b0 - | значение коэффициента b0 непрерывной дроби (тип: вещественный); |
a, b - | вещественные векторы длины n, компонентами которых являются коэффициенты ai и bi ( i = 1, ..., n) непрерывной дроби; |
n - | заданное число звеньев непрерывной дроби (тип: целый). |
Версии
pa06d_c - | вычисление значения непрерывной дроби в режиме удвоенной точности. При этом параметры b0, a, b должны иметь тип double. |
Вызываемые подпрограммы: нет
Замечания по использованию
В подпрограммах - функциях pa06r_c и pa06d_c имeeтcя внешняя структура с именем pa06rr_ , содержащая элемент целого типа с именем nreal. Знaчeниe пepeмeннoй nreal пoлaгaeтcя равной номеру звена непрерывной дроби, для которого fnreal = fnreal - 1 . |
Пусть требуется вычислить сумму 10 звеньев непрерывной дроби
arctg x = x / (1 + x2 / (3 + 4 x2 / (5 + 9 x2 / (7 + ... )...))) при x = 0.2 struct { int nreal; } pa06rr_; #define pa06rr_1 pa06rr_ int main(void) { /* Local variables */ extern float pa06r_c(float *, float *, float *, int *); static float a[10], b[10]; static int i__, n; static float x, b0, res; int i__1; n = 10; x = .2f; b0 = 0.f; a[0] = x; b[0] = 1.f; for (i__ = 2; i__ <= 10; ++i__) { /* Computing 2nd power */ i__1 = i__ - 1; a[i__ - 1] = i__1 * i__1 * x * x; b[i__ - 1] = (float) ((i__ << 1) - 1); /* L1: */ } res = (float)pa06r_c(&b0, a, b, &n); printf("\n %16.7e \n", res); printf("\n %5i \n", pa06rr_1.nreal); return 0; } /* main */ Результаты: res = 0.1973956 , nreal = 6