Float MAX_VALUE = 3.4028235E38 so the number you are entering is considered INFINITY even when it takes in the other two forms. I agree that it seems odd that it will take it as a string but not as a number.
Don't you think that asking the compiler to convert Strings into floats in order to check to see if it is too big a float might be a little too much to ask? The last one is not too big because it isn't a float but rather a double. Moving a very large double to a float just turns the float into INFINITY.