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()); }