fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        match self {
            RootError::NoRoot => write!(f, "There is no root in the interval"),
            RootError::NotConverge(a) => write!(f, "Not yet converge. Our guess is {:?}", a),
            RootError::ZeroDerivative(a) => write!(f, "Zero derivative in {:?}", a),
            RootError::ZeroSecant(a, b) => write!(f, "Zero secant in ({:?}, {:?})", a, b),
        }
    }
Macro for single function

# Description

For I=1, O=1, it is bother to write below code.

```ignore
let fx = problem.function([x])?[0];
```

This macro solve this problem as follows.

```ignore
let
src/numerical/root.rs