f64でsqrt()の関数があるので、f64に変換して計算する
https://doc.rust-lang.org/std/primitive.f64.html#method.sqrt
fn main() {
let n = 10;
let f = n as f64;
let s = f.sqrt();
println!("{}", s);
println!("{}", s as i32);
}
これをスタックマシンに実装します。とりあえずi32で統一しているので、ここでは、sqrt後 as i32としています。
match word {
"+" => add(&mut stack),
"-" => sub(&mut stack),
"*" => mul(&mut stack),
"/" => div(&mut stack),
"%" => r#mod(&mut stack),
"<" => lt(&mut stack),
">" => rt(&mut stack),
"sqrt" => r#sqrt(&mut stack),
"if" => op_if(&mut stack),
"def" => {
let tmp = op_def(&mut stack);
for (key, value) in &tmp {
vars.insert(key.to_string(), value.to_string());
}
},
_ => panic!("{word:?} could not be parsed"),
}
//
fn r#sqrt(stack: &mut Vec<String>) {
let f: f64 = stack.pop().unwrap().parse::<f64>().unwrap();
let s = f.sqrt();
stack.push((s as i32).to_string());
}