Вот вчера нашел довольно интересный код на языке C. Посмотрел на него, и вообще ничего не понял. Погуглил - как оказалось, никто не понял, как этот код работает:) Хотя вот общий механизм - в теле функции F_OO() содержится «рисованный» круг. А как мы знаем из геометрии, число π вычесляется по размеру круга. Вот и рассчитывается по этому кругу число π =/. И чем больше этот круг, тем точнее результат! Вот исходник - pi.c:
/* (c) Brian Westley, 1988 */ #define _ 0xF<00? --F<00||--F-OO--:-F<00||--F-OO--; int F=00,OO=00; main(){F_OO();printf("%1.3f\n",4.*-F/OO/OO);}F_OO() { _-_-_-_ _-_-_-_-_-_-_-_-_ _-_-_-_-_-_-_-_-_-_-_-_ _-_-_-_-_-_-_-_-_-_-_-_-_-_ _-_-_-_-_-_-_-_-_-_-_-_-_-_-_ _-_-_-_-_-_-_-_-_-_-_-_-_-_-_ _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ _-_-_-_-_-_-_-_-_-_-_-_-_-_-_ _-_-_-_-_-_-_-_-_-_-_-_-_-_-_ _-_-_-_-_-_-_-_-_-_-_-_-_-_ _-_-_-_-_-_-_-_-_-_-_-_ _-_-_-_-_-_-_-_ _-_-_-_ }
[keed'0'@mandrivka ~]$ gcc -o pi pi.c
pi.c: In function ‘main’:
pi.c:4: warning: incompatible implicit declaration of built-in function 'printf'
[keed'0'@mandrivka ~]$ ./pi
3.141
[keed'0'@mandrivka ~]$
Как видим, он собирается и запускается нормально! Оно работает!
Мои познания языка C не велики, поэтому, если кто-то все-таки
разберет - напишите в комменты!
Мои познания языка C не велики, поэтому, если кто-то все-таки
разберет - напишите в комменты!
3 коментарі:
Hello, I am Brian Westley, the writer of this C code.
Change "_" to "X" to make this easier to read:
#define X 0xF<00? --F<00||--F-OO--:-F<00||--F-OO--;
If you have:
X --> F=F-1, O=O-1
-X --> F=F-1
F = count of all X = area of circle
O = count of lines of X-X-X... = diameter of circle
4 * area / (diameter^2) = pi
Thx, Brian! I`m not good programmer and this source I was can`t understand. But now all good))
it's a simple)
Дописати коментар