Нашёл тут алгоритм для вычисления числа π http://litwr2.atspace.eu/pi/pi-spigot-benchmark.html Алго годен для теста старых компьютеров, в сайте есть тесты разных старых БК, ПК и мейнфреймов. Для райзена 3600Х код на ассме и на С++ выдаёт 19 мс при 3000 цифры, и 204(с++) и 207 мс при 10000. Код (C++): //число pi с точностью до count_digits знаков. v1.01 #include <stdio.h> #include <stdlib.h> #include <time.h> int main(int argc, const char **argv) { int count_digits = 50; if (argc>1) count_digits = atol(argv[1]); printf("Count digits: %d\n", count_digits); char *pStr = new char[count_digits + 1]; int size_data = (count_digits/4)*14; int *pData = new int[size_data+1]; clock_t time = clock(); for (int i = 0; i<size_data; i++) pData[i] = 2000; char *pN = pStr; for (int k=size_data, c = 0; k>0; k-=14){ int d = 0; for (int i = k;;){ d += pData[i] * 10000; int b = i * 2 - 1; pData[i] = d % b; d /= b; i--; if (i == 0) break; d *= i; } unsigned int a = c + d / 10000; c = d % 10000; for (int i=4; i;){ char chr = a % 10; a /= 10u; pN[--i] = chr+'0'; } pN += 4; } *pN = 0; printf("%s\ntime: %d ms\n", pStr, clock()-time); delete []pData; delete []pStr; return 0; } Оптимизация деления слабо даёт скорости, проверить свой хеон нет возможности. А как мы помним по тестам с простыми числами, райзен проигрывает даже старому хеону из-за делений. Возможно код с++ сможет обойти версию на ассме на других процессорах.
Возможно, что не в тему, но вот попытка заменить команду FLDPI чтобы затруднить анализ программы. Используется свойство [math]arctg(1.0)=\frac{\displaystyle \pi}{\displaystyle 4}[/math] Код (ASM): fld1 fadd st,st;st(0)=2.0 fld st fld st fpatan;ST(1)=arctg(ST(1)/ST(0))=arctg(1.0)=pi/4=0.7853981633974, вытолкнуть из стека fscale; ST(0)=ST(0)x2^{ST(1)} 0.7853981633974 * 4=3.141593265358979323…
пожалуй, самый красивый и эффективный алго тута - это монте карло https://www.geeksforgeeks.org/estimating-value-pi-using-monte-carlo/
кстати, смеха ради прикрути к этой смехоте длинную арифу а-ля https://gmplib.org/ и сравни получаемые дельты - реальное вычисление того же числа пи без длинной арифы невозможно (если речь идёт о чём-то большем, чем 10 знаков опосля запятой)