Finding the square root in embedded with #![no_std]

I am making a project in which I am using the stm32f3discovery board and need to know the square root of a a decimal number, there is obviously the function in the std library but as I cannot use the std library, is there a way in which I can find the square root without it?

Thanks,
Jack

When you say "decimal", do you mean f32 or f64? The libm crate has pure-rust implementations of most of these functions.

2 Likes

What do you mean by “decimal number” and which square root “function” in std are you referring to?

In case you mean floating point numbers, .sqrt() is a method on f64 and f32, so it ought to work with or without std (as far as I can tell).

It does not work without std, and I wish the documentation reflected this.

Okay, nevermind, I never used #![no_std] myself before. The documentation is indeed pretty confusing about this. What is the fundamental reason why those methods are not provided with #![no_std]?

For some targets, there are native instructions for these methods which LLVM will try to use, but in general it may have to fall back to the system libm -- which may not exist in no_std environments.

The micromath crate also provides sqrt that is optimized for embedded systems (but less accurate than libm's)

Yeah this crate is perfect, thank you

This topic was automatically closed 90 days after the last reply. We invite you to open a new topic if you have further questions or comments.