Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- float sum;
- float dl[ 100000 ];
- // Aby zminimalizowac bledy uzyjemy algorytmu Kahana:
- float kahanSum();
- int main() {
- srand( time(NULL) );
- int i;
- for( i = 0; i < 100000; ++i ) {
- // Zrobimy sobie kwadrat o boku 100000 i będziemy losować punkty:
- int a = rand()%100000, b = rand()%100000;
- // Jeden punkt ma współrzędne (0, a), drugi ma (b, 0) - w końcu są to sąsiednie boki.
- // Liczymy wektory:
- int vec_x = b, vec_y = -a;
- // Liczymy dlugosc wektora
- float dl_ = sqrt( pow( vec_x, 2 ) + pow( vec_y, 2 ) );
- dl[i] = dl_;
- }
- sum = kahanSum();
- // Skoro w specyfikacji dzialania mielismy kwadrat jednostkowy, to podzielmy.
- float sr = sum / 100000. / 100000.;
- printf( "%0.12f\n", sr );
- return 0;
- }
- float kahanSum() {
- float s = dl[0];
- float c = 0.;
- int i;
- for( i = 1; i < 100000; ++i ) {
- float y = dl[i] - c;
- float t = s + y;
- c = (t-s) - y;
- }
- return s;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement