#numbers #number-theory #math #maths

基于数字的

基于数字的是我尝试使处理数字基变得简单的尝试

6 个版本

0.2.3 2023 年 4 月 30 日
0.2.2 2023 年 4 月 26 日
0.1.1 2023 年 4 月 17 日

#661 in 算法

Download history 13/week @ 2024-03-27 26/week @ 2024-04-03

每月 55 次下载

Apache-2.0

48KB
925

Number-Based: 用于处理数字基的工具

Number-Based 是我尝试使处理数字基变得简单的尝试。

概述

目前,这个库围绕两种类型构建:uBase 和 iBase(希望不久的将来会有更多)。它们基本上等同于 u32/u64 和 i32/i64,但有一个限制,即它们可以存在于任何基数中,$B \in \mathbb{N}$。

随着基的增加,数字将开始看起来有点奇怪(因为西方数字系统没有大于 10 的基数的表示)。对于 10 到 36 的基数,数字以字母表示。对于大于 36 的基数,没有普遍的共识,因此这个库遵循大于 36 的基数的 utf8 编码序列。请注意,并不是所有 utf8 编码都被使用,因为某些编码不是在字符串中表示数字的有效字符。另外请注意,“-”不是一个有效的图形字符,因为它代表负数(见下例)。为了指定与该库中包含的不同的图形字符,请使用 custom_graphemes 功能(见文档)。有关使用自定义图形字符的参考,请参阅 示例文件夹 Github

用法

示例(这些可以在 示例文件夹 Github 中找到)

转换 uBase/iBase 实例

// converting down

// create uBase instance
let mut number = uBase::from_string(7863, "NUMBERBASED");

// convert number to base 10 
number.convert(10);

assert_eq!(number.display(), String::from("20781774882369576414324066149192513674771"));
// Do aslso note that number.conver(10).display() is equivalent to number.as_decimal() with the
// important distinction that as_decimal() returns a u128 and not a string





// converting up

// create uBase instance
let mut other_number = uBase::from_string(10, "120387517860123746975");

// convert number to base 10000
other_number.convert(10000);

assert_eq!(other_number.display(), String::from("1ࡒᶹ⇵ঢᮛ"));

使用 uBase/iBase 实例执行操作

// create the iBase instances
let number1 = iBase::from_string(30000, "-ð䧈炙㞈榻");
assert_eq!(number1.as_decimal(), -120387517860123746975);

let number2 = iBase::from_string(30000, "20");
assert_eq!(number2.as_decimal(), 60000);

// divide the numbers
let quotient = number1 / number2;
// other operations such as addition, subtraction, and multiplication are also available with
// the operators "+", "-", and "*" respectively

assert_eq!(quotient.display(), String::from("-¦┒㡺嚊"));
assert_eq!(quotient.as_decimal(), -120387517860123746975 / 60000);

许可证

Apache-2.0

请参阅 许可证文档 以获取完整的许可证。

依赖项

~48KB