Из формул Мачина наиболее замечательная для i8080 будет:
32*atan(1/10)-4*atan(1/239)-16*atan(1/515)
если считать в 100-ой системе, по такому алгоритму:
Код:
a=32/10
b=4/239
c=16/515
for n=1 to len
pi=(a-b-c)/(2n-1) ;здесь было n, что есть злобный баг
a/=100
b/=239 b/=239
c/=103 c/=103 c/=25
end for
Деление на 25,103 и 239 делается по таблицам менее чем за 70 тактов на байт, а на 100 вообще делить не потребуется. Единственная сложная операция это деление на n, там получается примерно 400 тактов на байт, если делитель более 127. Но деление на n можно совместить для всех трёх слагаемых, при этом память будет требоваться для pi и трёх слагаемых. Результаты в EmuZWin для 3.5 МГц получились такие:
100 цифр - 0,2 ms (=1/5 s)
300 цифр - 2 s
1000 цифр - 25 s
4000 цифр - 418 s
В архиве текст программы и картинки, большие цифры это время в кадрах. Что касается вычислений, то там только команды i8080 используются, если нигде не зевнул. Комментариев пока нету, но если кто будет допиливать для реального i8080 могу добавить.



pi_fast.zip