Programming languages have different ways of expressing floating-point literals.



Task

Show how floating-point literals can be expressed in your language: decimal or other bases, exponential notation, and any other special features.

You may want to include a regular expression or BNF/ABNF/EBNF defining allowable formats for your language.



Related tasks

   Literals/Integer
   Extreme floating point values


/* NetRexx */
options replace format comments java crossref symbols nobinary
 
numeric digits 40 -- make lots of space for big numbers
numeric form scientific -- set output form for exponential notation
 
say 'Sample using objects of type "Rexx" (default):'
fv =      1.5; say      '1.5'.right(20) '==' normalize(fv).right(20) --            1.5
fv =     -1.5; say     '-1.5'.right(20) '==' normalize(fv).right(20) --           -1.5
fv =    15e-1; say    '15e-1'.right(20) '==' normalize(fv).right(20) --            1.5
fv =    3e-12; say    '3e-12'.right(20) '==' normalize(fv).right(20) --          3E-12
fv =    3e+12; say    '3e+12'.right(20) '==' normalize(fv).right(20) --  3000000000000
fv = 17.3E-12; say '17.3E-12'.right(20) '==' normalize(fv).right(20) --       1.73E-11
fv = 17.3E+12; say '17.3E+12'.right(20) '==' normalize(fv).right(20) -- 17300000000000
fv = 17.3E+40; say '17.3E+40'.right(20) '==' normalize(fv).right(20) --       1.73E+41
fv = 0.033e+9; say '0.033e+9'.right(20) '==' normalize(fv).right(20) --       33000000
fv = 0.033e-9; say '0.033e-9'.right(20) '==' normalize(fv).right(20) --        3.3E-11
say
 
say 'Sample using primitive type "float":'
ff = float
ff = float    15e-1; say    '15e-1'.right(20) '==' normalize(ff).right(20) --            1.5
ff = float 17.3E-12; say '17.3E-12'.right(20) '==' normalize(ff).right(20) --       1.73E-11
ff = float 17.3E+12; say '17.3E+12'.right(20) '==' normalize(ff).right(20) -- 17300000000000
ff = float 0.033E+9; say '0.033E+9'.right(20) '==' normalize(ff).right(20) --       33000000
ff = float 0.033E-9; say '0.033E-9'.right(20) '==' normalize(ff).right(20) --        3.3E-11
say
 
say 'Sample using primitive type "double":'
fd = double
fd =    15e-1; say    '15e-1'.right(20) '==' normalize(fd).right(20) --            1.5
fd = 17.3E-12; say '17.3E-12'.right(20) '==' normalize(fd).right(20) --       1.73E-11
fd = 17.3E+12; say '17.3E+12'.right(20) '==' normalize(fd).right(20) -- 17300000000000
fd = 17.3E+40; say '17.3E+40'.right(20) '==' normalize(fd).right(20) --       1.73E+41
fd = 0.033E+9; say '0.033E+9'.right(20) '==' normalize(fd).right(20) --       33000000
fd = 0.033E-9; say '0.033E-9'.right(20) '==' normalize(fd).right(20) --        3.3E-11
say
 
return
 
/**
 * Convert input to a Rexx object and add zero to the value which forces NetRexx to change its internal representation
 *
 * @param fv a Rexx object containing the floating point value
 * @return a Rexx object which allows NetRexx string manipulation methods to act on it
 */
method normalize(fv) private constant
  return fv + 0
 