Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
bb9c3ed8
R
Rust
项目概览
int
/
Rust
大约 1 年 前同步成功
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
Rust
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
bb9c3ed8
编写于
1月 21, 2013
作者:
M
Marvin Löbel
提交者:
Brian Anderson
2月 03, 2013
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Added some generic number functions to core::num
Also fixes previous commit not compiling due to not finding Option.
上级
05d83017
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
89 addition
and
0 deletion
+89
-0
src/libcore/num/num.rs
src/libcore/num/num.rs
+89
-0
未找到文件。
src/libcore/num/num.rs
浏览文件 @
bb9c3ed8
...
...
@@ -59,4 +59,93 @@ pub trait ToStrRadix {
pub
trait
FromStrRadix
{
static
pub
pure
fn
from_str_radix
(
str
:
&
str
,
radix
:
uint
)
->
Option
<
self
>
;
}
// Generic math functions:
/// Dynamically calculates the value `inf` (`1/0`).
/// Can fail on integer types.
#[inline(always)]
pub
pure
fn
infinity
<
T
:
Num
One
Zero
>
()
->
T
{
let
_0
:
T
=
Zero
::
zero
();
let
_1
:
T
=
One
::
one
();
_1
/
_0
}
/// Dynamically calculates the value `-inf` (`-1/0`).
/// Can fail on integer types.
#[inline(always)]
pub
pure
fn
neg_infinity
<
T
:
Num
One
Zero
>
()
->
T
{
let
_0
:
T
=
Zero
::
zero
();
let
_1
:
T
=
One
::
one
();
-
_1
/
_0
}
/// Dynamically calculates the value `NaN` (`0/0`).
/// Can fail on integer types.
#[inline(always)]
pub
pure
fn
NaN
<
T
:
Num
Zero
>
()
->
T
{
let
_0
:
T
=
Zero
::
zero
();
_0
/
_0
}
/// Returns `true` if `num` has the value `inf` (`1/0`).
/// Can fail on integer types.
#[inline(always)]
pub
pure
fn
is_infinity
<
T
:
Num
One
Zero
Eq
>
(
num
:
&
T
)
->
bool
{
(
*
num
)
==
(
infinity
::
<
T
>
())
}
/// Returns `true` if `num` has the value `-inf` (`-1/0`).
/// Can fail on integer types.
#[inline(always)]
pub
pure
fn
is_neg_infinity
<
T
:
Num
One
Zero
Eq
>
(
num
:
&
T
)
->
bool
{
(
*
num
)
==
(
neg_infinity
::
<
T
>
())
}
/// Returns `true` if `num` has the value `NaN` (is not equal to itself).
#[inline(always)]
pub
pure
fn
is_NaN
<
T
:
Num
Eq
>
(
num
:
&
T
)
->
bool
{
(
*
num
)
!=
(
*
num
)
}
/// Returns `true` if `num` has the value `-0` (`1/num == -1/0`).
/// Can fail on integer types.
#[inline(always)]
pub
pure
fn
is_neg_zero
<
T
:
Num
One
Zero
Eq
>
(
num
:
&
T
)
->
bool
{
let
_1
:
T
=
One
::
one
();
let
_0
:
T
=
Zero
::
zero
();
*
num
==
_0
&&
is_neg_infinity
(
&
(
_1
/
*
num
))
}
/**
* Calculates a power to a given radix, optimized for uint `pow` and `radix`.
*
* Returns `radix^pow` as `T`.
*
* Note:
* Also returns `1` for `0^0`, despite that technically being an
* undefined number. The Reason for this is twofold:
* - If code written to use this function cares about that special case, it's
* probably going to catch it before making the call.
* - If code written to use this function doesn't care about it, it's
* probably assuming that `x^0` always equals `1`.
*/
pub
pure
fn
pow_with_uint
<
T
:
Num
One
Zero
>
(
radix
:
uint
,
pow
:
uint
)
->
T
{
let
_0
:
T
=
Zero
::
zero
();
let
_1
:
T
=
One
::
one
();
if
pow
==
0u
{
return
_1
;
}
if
radix
==
0u
{
return
_0
;
}
let
mut
my_pow
=
pow
;
let
mut
total
=
_1
;
let
mut
multiplier
=
Num
::
from_int
(
radix
as
int
);
while
(
my_pow
>
0u
)
{
if
my_pow
%
2u
==
1u
{
total
*=
multiplier
;
}
my_pow
/=
2u
;
multiplier
*=
multiplier
;
}
total
}
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录