fixnumの範囲の値はfixnumで扱って、bignumの範囲の値はbignumで扱い、
それをひとつの型で隠蔽するっていう、最近ではごく普通に使われる手法の話じゃないの?