Using Divw in Pyteal v6 - General - Algorand
Using Divw in Pyteal v6
post by javier0rosas on Feb 22, 2022
Dear Algorand developers,
Great job on the new AVM release on Betanet! I am playing around with some of the new opcodes and trying to get a better understanding of them.
Specifically, I am trying to understand Divw opcode in Pyteal v6.
Context:
@Subroutine(TealType.uint64)
def divide_func():
numerator = Int(453)
denominator = Int(7894030)
"""
This next line is what confuses me.
"""
#result = Divw(high, low, divisor)
return Seq([\
Return( result ),\
])
Question 1: What makes Divw different from the normal / opcode?
Question 2: How do I extract the high and low bits from the numerator?
Question 3: Does this opcode return more than one value on the stack? If so, how would I use them in the above context?
post by fabrice on Feb 23, 2022
divw requires the result to fit an uint64.
Since it is not yet available in TestNet/MainNet, but only in BetaNet, the documentation is only in the specs:
Regarding high/low for numerator, it’s to allow the numerator to have more than 64-bits.
For example, the number 10*2^64+42 = 184467440737095516202 would be defined as:
high = Int(10)
low = Int(42)
But honestly, if you need numbers with more than 64 bits, it is often much simpler to use the byteslice arithmetic:
[https://pyteal.readthedocs.io/en/stable/arithmetic_expression.html#byteslice-arithmetic]