When one does these things by hand, the first step is to divide the exponent by 3 for a cube root (2 for a square root, etc). If more accuracy is needed, then extracting maybe the high-order 4 bits of the mantissa and using that in a lookup table would be sufficient.
Here’s another implementation for those interested in benchmarking:
Fair enough for already existing features/syntax: they are there, and we have to do with them as they are. But when it comes to introduce a new syntax, it can be a good idea to look at what it means elsewhere. ^ is a widely used convention to denote exponentiation/superscript in many languages or math oriented softwares/utilities.
Summary of suggestions for an operator based nth integer root (in order of appearance), with my comments :
x = y ** n ! reminder of nth power ;)
y = x // n ! would be possible, although // has a fully different meaning in another context
y = x */ n ! 2-characters operator, like for the nth power
y = x ^ n ! denotes the nth power in many other languages rather then the nth root
y = n .throot. x ! reversed order ?
y = x .root. n ! would make sense if (x .pow. n) was existing
y = x ^/ n ! could make sense if y^n was adopted as an alternative to y**n
Not to discourage the exploration, but I’ll just note that this is part of a paper adding the missing operations suggested by IEEE, and ** is the only operator we currently use to support them.
| IEEE-754 Operation | Fortran Operation | Status |
|---|---|---|
| exp | EXP | available |
| expm1 | EXPM1 | proposed |
| exp2 | 2**x | available |
| exp2m1 | EXP2M1 | proposed |
| exp10 | 10**x | available |
| exp10m1 | EXP10M1 | proposed |
| log | LOG | available |
| log2 | LOG2 | proposed |
| log10 | LOG10 | available |
| logp1 | LOGP1 | proposed |
| log2p1 | LOG2P1 | proposed |
| log10p1 | LOG10P1 | proposed |
| hypot | HYPOT | available |
| rsqrt | RSQRT | proposed |
| compound | COMPOUND | proposed |
| rootn | ROOTN | proposed |
| pown | x**n | available |
| pow | x**y | available |
| powr | POWR | proposed |
| sin | SIN | available |
| cos | COS | available |
| tan | TAN | available |
| sinPi | SINPI | available |
| cosPi | COSPI | available |
| tanPi | TANPI | available |
| asin | ASIN | available |
| acos | ACOS | available |
| atan | ATAN | available |
| atan2 | ATAN2 | available |
| asinPi | ASINPI | available |
| acosPi | ACOSPI | available |
| atanPi | ATANPI | available |
| atan2Pi | ATAN2PI | available |
| sinh | SINH | available |
| cosh | COSH | available |
| tanh | TANH | available |
| asinh | ASINH | available |
| acosh | ACOSH | available |
| atanh | ATANH | available |
Got it… Just in case it’s still possible to consider it…