From sitkarev на komitex.ru Sun Sep 9 00:39:30 2012 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Sun, 09 Sep 2012 00:39:30 +0400 Subject: [P&AM Lab] =?utf-8?b?0KPRgdGC0L7QudGH0LjQstGL0Lkg0L7QvdC70LDQudC9?= =?utf-8?b?INCw0LvQs9C+0YDQuNGC0LwgLS0g0YHRgtCw0L3QtNCw0YDRgtC90L7QtSA=?= =?utf-8?b?0L7RgtC60LvQvtC90LXQvdC40LU=?= Message-ID: <504BAD02.5020003@komitex.ru> Приветствую всех. Последняя рекуррентная формула, что я показывал, в коде на Си ниже. На мой взгляд, в коде выглядит проще, чем в формуле на доске. Может быть я не прав. #define NELEMS(x) (sizeof(x)/sizeof(x[0])) void var3() { float x[] = { 10000, 10001, 10002 }; float M, Q; float c, s2; int i; M = x[0]; Q = 0.0; for (i = 1; i < NELEMS(x); i++) { c = x[i] - M; Q += (i*c*c)/(i+1); M += c / (i+1); s2 = Q / i; } printf("mu=%e s^2=%e\n", M, s2); } Удачных экспериментов. -- Г.А. From sitkarev на komitex.ru Mon Sep 10 00:35:35 2012 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Mon, 10 Sep 2012 00:35:35 +0400 Subject: [P&AM Lab] =?utf-8?b?0JrQsNGC0LDRgdGC0YDQvtGE0LjRh9C10YHQutCw0Y8g?= =?utf-8?b?0L/QvtGC0LXRgNGPINC30L3QsNGH0LjQvNGL0YUg0YDQsNC30YDRj9C00L4=?= =?utf-8?b?0LIgLS0g0L/RgNC40LzQtdGAINGBINC00LXRgtCw0LvRjNC90YvQvCDQstGL?= =?utf-8?b?0LLQvtC00L7QvA==?= Message-ID: <504CFD97.6060706@komitex.ru> Приветствую всех! В прошедшую субботу мы рассматривали один пример с вычислением формулы f(x) = (1 - cos(x)) / x^2, для случая, когда x близок к нулю. Я сделал один пример, который даёт хорошее представление о том, что происходило с вычислением и откуда взялась ошибка. Достаточно скомпилировать исходник и запустить. Немного по выводу: 45) y = 9.84254003e-01 x = 2.46085750e-04 base 10: 1.0 = 1.000000000 cos(x) = 0.999999940 base 2: 1.0 = 1.00000000000000000000000x2^0 cos(x) = 1.11111111111111111111111x2^-1 На индексе 45 мы видим, что для x (не самого маленького, всего приблизительно 0,000246) при вычислении по формуле ?в лоб? получаем результат ~ 0,984, в то время как известен правильный ответ ~ 0,5. relerr(y) = |y - y'| / |y| = |0.5 - 0.984| / |0.5| =~ 0,968 , т.е. ошибка приблизительно равна 100%. Промежуточные числа в выводе представлены в десятичной и двоичной форме; расшифровка соответственно base 10 и base 2. Обратите внимание, что для base 2 там даётся значение мантиссы (с напечатанным скрытым битом) и экспоненты (мантисса умножается на степень двойки). Последние вытащены прямо из формата IEEE single precision. Видно, что аппроксимация для cos(x) в мантиссе содержит только единицы. Вычитая из (1.0)_2 число (0.111111111111111111111111)_2 мы получаем ответ, где вообще не содержится корректных разрядов, а только ошибка от округления аппроксимации. Здесь в примере удалось довольно плавно подойти к нарастанию ошибки, можно хорошо рассмотреть, что происходило по мере приближения аппроксимации cos(x) к единице. Когда аппроксимация cos(x) (для x = 2.05071454e-04) становится равной единице, то алгоритм вообще выдаёт полную ахинею. Результат вычисления -- ноль. Думаю, всем должно быть интересно посмотреть на эти ?внутренности?. -- Г.А. ----------- следущая часть ----------- A non-text attachment was scrubbed... Name: test.c Type: text/x-csrc Size: 1035 bytes Desc: отсутствует URL: From lonely.ruyk на mail.ru Sat Sep 22 17:25:57 2012 From: lonely.ruyk на mail.ru (ruyk) Date: Sat, 22 Sep 2012 17:25:57 +0400 Subject: [P&AM Lab] ptrace Message-ID: <20120922172557.0b2a6d9f@Lonely-1015.local> Здравствуйте всем. Портянка по ptrace(2) с примерами исходников во вложении. В папке src вложенно 2 версии исходников, если у вас 32 битная версия то компилировать нужно файл get_open_32.c а если 64 битная - get_open_64.c ----------- следущая часть ----------- A non-text attachment was scrubbed... Name: ptrace_tuto.tar.gz Type: application/x-gzip Size: 40843 bytes Desc: отсутствует URL: ----------- следущая часть ----------- A non-text attachment was scrubbed... Name: ptrace_tuto.zip Type: application/zip Size: 41131 bytes Desc: отсутствует URL: