Я не знаю много о блоке, но я вполне уверен, что существуют инструкции по квадратному корню относительно x86? Я пытаюсь заставить функцию квадратного корня работать хорошо в пене и той, которую я нашел, увязает так или иначе, когда я много раз выполняю его.
: sqrt-closer ( square guess -- square guess adjustment)
2dup / over - 2 /
;
: sqrt ( square -- root )
1 begin
sqrt-closer dup
while + repeat
drop nip ;
Существует инструкция квадратного корня с плавающей точкой (FSQRT). Это довольно быстро, даже если вам нужен только целочисленный квадратный корень.
Посмотрите здесь:
http://www.azillionmonkeys.com/qed/sqroot.html
Все, что вы когда-либо хотели знать о квадратных корнях, но боялись спросить. Содержит реализацию на языке сборки x86.