von der mathematischen seite betrachtet setzt sich jede zahl aus ziffern zusammen. du brauchst also nur definierte menge an ziffern (binär, octal, dezimal, hexadezimal) und schon kannst du nach belieben (wie mit legosteinen) zahlen bauen. du kannst auch nen 3er oder 5er system nehmen, also musst nicht die, die ich gesagt habe verwenden.
beim dezimal system hast du in der 2. klasse gelernt, dass es hunder, zehner, einer stellen gibt. 145. hat 1x hundert + 4x zehn + 5x eins. in der 3. klasse sind dann zehntel, hunderstel, tausendstel etc dazu gekommen. 1,25 hat 1x einer, 2x zehntel und 5x hunderstel.
beim binärsystem hast du andere stellen. zweier, vierer, achter, sechzehner,.... und die nachkommerstellen hälfte, viertel, achtel,
beim hexadezimal system sind es .....16^², 16^1, 16^0, 16^-1, 16^-2 .....
so da siehste auch schon das problem. 0,3 kann im binärsystem (wir reden hier nur von festkommazahlen) nicht komplett dargestellt werden, da es zu einer zahl mit periode wird.
und das was du oben schreibst wäre technisch denkbar, allerdings nicht im c++ standard vorgesehen. deswegen meckert dein compiler auch. wenn du das wirklich brauchst, dann mach nen workaround mit makros oder irgendnen convertierungscode.