2015-01-18 2 views
7

Простой вопрос: Где sin()? Я искал и нашел только в документах Rust, что есть такие черты, как std::num::Float, что требует sin, но нет реализация.Где функция синуса?

ответ

11

Float черты был удален, и методы, присущие реализации на типы в настоящее время. Это означает, что есть немного меньше набирать для доступа математических функций:

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

Однако это неоднозначное, если 3.14159.sin() относится к 32- или 64-битное числу, поэтому вам нужно указать его явно. Выше я установить тип переменных, но вы также можете использовать тип суффикс:

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

Вы также можете использовать сомнительный синтаксис вызова функции:

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

Это интересно (и немного запутанный, когда приходите из фона C++/java), что вы не используете/импортируете «математику», а «плавать». – Kapichu

+1

Не работает. В первом примере я получаю 'error: type _ не реализует никакого метода в области с именем sin', во втором примере я получаю' error: unresolved name Float :: sin'. $ rustc --version выходы 'rustc 0.13.0-nightly (96a3c7c6a 2014-12-23 22:21:10 +0000)' – Kapichu

+1

Вы хотите перейти на новейшую версию Rust. В рамках подготовки к выпуску 1.0 есть много работы! В этом конкретном случае литералы с плавающей запятой теперь по умолчанию имеют тип 'f64' ([релевантный RFC] (https://github.com/rust-lang/rfcs/blob/master/text/0212-restore-int-fallback. д)). Если вы хотите заставить его работать без обновления, попробуйте '3.14f64.sin()'. – Shepmaster

1

Float is Trait, включить реализацию, импортировать это, чтобы подать заявку на f32 или f64.

use std::num::Float; 

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