My current implement is

```
fn check(a:u8, b:u8, limit:u8) -> bool {
((a as i16) - (b as i16)).abs() as u8 < limit
}
```

Can this be more efficient

My current implement is

```
fn check(a:u8, b:u8, limit:u8) -> bool {
((a as i16) - (b as i16)).abs() as u8 < limit
}
```

Can this be more efficient

`a.abs_diff(b) < limit`

will compile to almost the same machine code, so it won't be *more efficient* (the optimizer is very good at recognizing patterns in arithmetic), but it is more concise and clear.

8 Likes

What is the larger context of your question? Are you doing many of these tests at once? Are any of the arguments constant?

I'm not sure this is more efficient, but it sticks to `u8`

:

```
fn check(a: u8, b: u8, limit: u8) -> bool {
if limit == 0 {
false
} else {
let limit2 = limit - 1;
a <= b.saturating_add(limit2) && b <= a.saturating_add(limit2)
}
}
```