Skip to main content

Module 0x1::u128

use 0x1::option;
use 0x1::string;
use 0x1::vector;

Function bitwise_not

Returns the bitwise not of the value. Each bit that is 1 becomes 0. Each bit that is 0 becomes 1.

public fun bitwise_not(x: u128): u128
Implementation
public fun bitwise_not(x: u128): u128 {
    x ^ max_value!()
}

Function max

Return the larger of x and y

public fun max(x: u128, y: u128): u128
Implementation
public fun max(x: u128, y: u128): u128 {
    std::macros::num_max!(x, y)
}

Function min

Return the smaller of x and y

public fun min(x: u128, y: u128): u128
Implementation
public fun min(x: u128, y: u128): u128 {
    std::macros::num_min!(x, y)
}

Function diff

Return the absolute value of x - y

public fun diff(x: u128, y: u128): u128
Implementation
public fun diff(x: u128, y: u128): u128 {
    std::macros::num_diff!(x, y)
}

Function divide_and_round_up

Calculate x / y, but round up the result.

public fun divide_and_round_up(x: u128, y: u128): u128
Implementation
public fun divide_and_round_up(x: u128, y: u128): u128 {
    std::macros::num_divide_and_round_up!(x, y)
}

Function pow

Return the value of a base raised to a power

public fun pow(base: u128, exponent: u8): u128
Implementation
public fun pow(base: u128, exponent: u8): u128 {
    std::macros::num_pow!(base, exponent)
}

Function sqrt

Get a nearest lower integer Square Root for x. Given that this function can only operate with integers, it is impossible to get perfect (or precise) integer square root for some numbers.

Example:

math::sqrt(9) => 3
math::sqrt(8) => 2 // the nearest lower square root is 4;

In integer math, one of the possible ways to get results with more precision is to use higher values or temporarily multiply the value by some bigger number. Ideally if this is a square of 10 or 100.

Example:

math::sqrt(8) => 2;
math::sqrt(8 * 10000) => 282;
// now we can use this value as if it was 2.82;
// but to get the actual result, this value needs
// to be divided by 100 (because sqrt(10000)).


math::sqrt(8 * 1000000) => 2828; // same as above, 2828 / 1000 (2.828)
public fun sqrt(x: u128): u128
Implementation
public fun sqrt(x: u128): u128 {
    std::macros::num_sqrt!<u128, u256>(x, 128)
}

Function try_as_u8

Try to convert a u128 to a u8. Returns None if the value is too large.

public fun try_as_u8(x: u128): option::Option<u8>
Implementation
public fun try_as_u8(x: u128): Option<u8> {
    std::macros::try_as_u8!(x)
}

Function try_as_u16

Try to convert a u128 to a u16. Returns None if the value is too large.

public fun try_as_u16(x: u128): option::Option<u16>
Implementation
public fun try_as_u16(x: u128): Option<u16> {
    std::macros::try_as_u16!(x)
}

Function try_as_u32

Try to convert a u128 to a u32. Returns None if the value is too large.

public fun try_as_u32(x: u128): option::Option<u32>
Implementation
public fun try_as_u32(x: u128): Option<u32> {
    std::macros::try_as_u32!(x)
}

Function try_as_u64

Try to convert a u128 to a u64. Returns None if the value is too large.

public fun try_as_u64(x: u128): option::Option<u64>
Implementation
public fun try_as_u64(x: u128): Option<u64> {
    std::macros::try_as_u64!(x)
}

Function to_string

public fun to_string(x: u128): string::String
Implementation
public fun to_string(x: u128): String {
    std::macros::num_to_string!(x)
}