Fixed Point

Icon Link固定小数点数库

固定小数点数库提供了在 Sway 中使用固定小数点数的库。它有 3 种不同的无符号类型:UFP32UFP64UFP128,以及 3 种有符号类型IFP64IFP128IFP256。这些类型是栈分配的。

这种类型在底层存储为u32u64U128。因此,大小可以在编译时知道,长度是静态的。

有关固定小数点数库的实现详细信息,请参阅Sway Libs 文档 Icon Link

Icon Link导入固定小数点数库

要使用固定小数点数库,必须将 Sway Libs 添加到Forc.toml文件中,然后将其导入到您的 Sway 项目中。要将 Sway Libs 添加为项目的依赖项,请参阅入门

要将固定小数点数库导入到您的 Sway 智能合约中,请将以下内容添加到您的 Sway 文件中:

use sway_libs::fixed_point::*;

Icon Link支持的固定小数点数

Icon Link有符号固定小数点数

我们目前支持以下有符号固定小数点数:

  • IFP64
  • IFP128
  • IFP256

要使用IFP64IFP128IFP256类型,请像这样将其导入到您的 Sway 项目中:

use sway_libs::fixed_point::{ifp128::IFP128, ifp256::IFP256, ifp64::IFP64,};

Icon Link无符号固定小数点数

我们目前支持以下无符号固定小数点数:

  • UFP32
  • UFP64
  • UFP128

要使用UFP32UFP64UFP128类型,请像这样将其导入到您的 Sway 项目中:

use sway_libs::fixed_point::{ufp128::UFP128, ufp32::UFP32, ufp64::UFP64,};

Icon Link基本功能

Icon Link实例化新的固定小数点数

一旦导入,任何有符号或无符号固定小数点数类型都可以通过定义一个新变量并调用from函数来实例化。

let mut ufp32_value = UFP32::from(0u32);
let mut ufp64_value = UFP64::from(0u64);
let mut ufp128_value = UFP128::from((0u64, 0u64));

Icon Link基本数学函数

基本算术运算像平常一样工作。

fn add_ufp(val1: UFP64, val2: UFP64) {
    let result: UFP64 = val1 + val2;
}
 
fn subtract_ufp(val1: UFP64, val2: UFP64) {
    let result: UFP64 = val1 - val2;
}
 
fn multiply_ufp(val1: UFP64, val2: UFP64) {
    let result: UFP64 = val1 * val2;
}
 
fn divide_ufp(val1: UFP64, val2: UFP64) {
    let result: UFP64 = val1 / val2;
}

Icon Link支持的高级数学函数

我们目前支持以下高级数学函数:

Icon Link指数

let ten = UFP64::from_uint(10);
let res = UFP64::exp(ten);

Icon Link平方根

let ufp64_169 = UFP64::from_uint(169);
let res = UFP64::sqrt(ufp64_169);

Icon Link

let five = UFP64::from_uint(5);
let res = five.pow(3u32);