正弦函数在哪里?

24
简单问题: sin()在哪里?我搜索过了,只在 Rust 文档中发现有像 std::num::Float 这样的特性需要 sin,但没有找到具体的实现。
2个回答

31

Float特质已被移除,现在这些方法是类型的固有实现(f32f64)。这意味着访问数学函数时需要输入的内容更少了一点:

fn main() {
    let val: f32 = 3.14159;
    println!("{}", val.sin());
}

但是,3.14159.sin()引用的是32位还是64位数字是不明确的,因此您需要明确指定。

上面,我设置了变量的类型,但您也可以使用类型后缀:

fn main() {
    println!("{}", 3.14159_f64.sin());
}

您还可以使用完全限定语法:

fn main() {
    println!("{}", f32::sin(3.14159));
}

真正的代码应该使用PI 常量;我使用了内联数字以避免复杂化问题。


有趣的是(对于那些有C++/Java背景的人来说可能有点困惑),你不使用/导入“math”,而是使用“Float”。 - Kapichu
1
不起作用。在第一个例子中,我得到了“错误:类型_没有实现任何名为sin的范围内的方法”,在第二个例子中,我得到了“错误:未解决的名称Float :: sin”。$ rustc --version输出“rustc 0.13.0-nightly(96a3c7c6a 2014-12-23 22:21:10 +0000)”。 - Kapichu
2
你会想要升级到最新版本的Rust。为了1.0版本的发布,有很多工作正在进行中!在这种情况下,浮点字面量现在默认为类型f64相关RFC)。如果你想让它正常工作,而不升级,请尝试3.14f64.sin() - Shepmaster
2
@Kapichu,那些错误很可能是由于这些函数先前是std::num::FloatMath特性的一部分所致(而不是字面上的默认值),但也可以通过升级来解决这个问题(我也建议使用multirust)。 - huon

-1

Float 是一个 Trait,包含实现,导入后可以应用于 f32 或 f64。

use std::num::Float;

fn main() {
    println!("{}", 1.0f64.sin());
}

你的回答直到现在都不相关。Float 特质已被移除,正如 @Shepmaster 所提到的。 - tripulse

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接