Write a sqrt algorithm in cairo using with
- on debian, add [python-dev]
sudo apt-get install python3-dev
Add an out folder and load env vars. Edit the setup.sh file with the paths of your home dir.
# output dir
mkdir out
# setup
. ./setup.sh
FILE=test make watch
FILE=test make compile && FILE=test make run
- cairo-goldmine
- vim-cairo-gist
- starknet-compile
- cairo-intro
- uint256-felt
- type-safety
- uint256-example
- learn-notes
- fixed-point-lib
- safe-math
- floating-point-in-solidity
- 512-bit-divition
- 256-bit-computing
- 1-million-digits
- Fixed known ap error using local:
cairo Only functions with known ap change may be used in an expression.
func sqrt{range_check_ptr}(n: felt, s: felt) -> (result: felt) {
alloc_locals;
if (n == 0) {
return (result = WAD);
}
let (local x) = sqrt(n - 1, s);
let q1 = div(s, x);
let q2 = div((x + q1), 2 * WAD);
return (result = q2);
}
func main{output_ptr: felt*, range_check_ptr}() {
// test division
let r1 = div(10500000000000000000, 1050000000000000000);
assert r1 = 10*WAD;
// high precision
let (y1) = sqrt(STEPS, 2*WAD);
assert y1 = 1414213562373095049;
return ();
}
340282366920938463463374607431768211456 - 2**128 [39 digits] 141421356237309504880168872420969807857 - my solution [39 digits], looping 10 cycles 14142135623730950488016887242096980785696718753769480731766797379907324784621 - [77 digits]