henry-hz / cairo-challenge

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Challenge

Write a sqrt algorithm in cairo using with $10^{18}$ fixed-point-aritmetic

Install Cairo

  • on debian, add [python-dev]
sudo apt-get install python3-dev

Setup

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

Develop

FILE=test make watch

Run

FILE=test make compile && FILE=test make run

Resources

Projects

Issues

  • Fixed known ap error using local:
cairo Only functions with known ap change may be used in an expression.

Draft

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]

About


Languages

Language:Cairo 85.1%Language:Makefile 9.3%Language:Shell 4.0%Language:Haskell 1.6%