twoBasesOneRoot() random() < 0.75 VALS.root isOdd( EXP_D ) && ( random() < 0.75 ) VALS.base_1 VALS.base_2 EXP_NEG ? BASE_D : BASE_N EXP_NEG ? BASE_N : BASE_D BASE_NEG round( pow( EXP_NEG ? BASE_D : BASE_N, 1 / EXP_D_ORIG ) ) round( pow( EXP_NEG ? BASE_N : BASE_D, 1 / EXP_D_ORIG ) ) function() { var max_exp = min( maxReasonableExp( ROOT_N_ORIG ), maxReasonableExp( ROOT_D_ORIG ) ); var exp_n; while ( exp_n === undefined || exp_n % EXP_D_ORIG === 0 ) { exp_n = randRange( 2, max_exp ); } return exp_n; }() getGCD( EXP_N_ORIG, EXP_D_ORIG ) EXP_N_ORIG / GCD EXP_D_ORIG / GCD round( pow( EXP_NEG ? BASE_D : BASE_N, 1 / EXP_D ) ) round( pow( EXP_NEG ? BASE_N : BASE_D, 1 / EXP_D ) ) ROOT_NEG && isOdd( EXP_N ) round( pow( ROOT_N, EXP_N ) ) round( pow( ROOT_D, EXP_N ) )

`\Large{fracParens( BASE_N, BASE_D )^{fracSmall( ( EXP_NEG ? -1 : 1 ) * EXP_N, EXP_D )} = {?}}`

SOL_N / SOL_D

`= fracParens( BASEF_N, BASEF_D )^{fracSmall( EXP_N, EXP_D )}`

`= \left(fracParens( BASEF_N, BASEF_D )^{fracSmall( 1, EXP_D )}\right)^{EXP_N}`

To simplify `fracParens( BASEF_N, BASEF_D )^{fracSmall( 1, EXP_D )}`, figure out what goes in the blank:
`\left(? \right)^{abs( EXP_D )}=frac( BASEF_N, BASEF_D )`

To simplify `fracParens( BASEF_N, BASEF_D )^{fracSmall( 1, EXP_D )}`, figure out what goes in the blank:
`\left(\color{blue}{frac( ROOT_N, ROOT_D )}\right)^{abs( EXP_D )}=frac( BASEF_N, BASEF_D )`

so `\quadfracParens( BASEF_N, BASEF_D )^{fracSmall( 1, EXP_D )}=frac( ROOT_N, ROOT_D )`

So `fracParens( BASEF_N, BASEF_D )^{fracSmall( EXP_N, EXP_D )}=\left(fracParens( BASEF_N, BASEF_D )^{fracSmall( 1, EXP_D )}\right)^{EXP_N}=fracParens( ROOT_N, ROOT_D )^{EXP_N}`

`= fraction( ROOT_N, ROOT_D, true, true, false, true )^{EXP_N}`

`= v`