# File lib/facet/lisp-format.rb, line 1171
        def execute(state)
          width = param(0, state, nil)
          digits = param(1, state, nil)
          edigits = param(2, state, nil)
          scale = param(3, state, 1)
          overflowchar = param(4, state, nil)
          padchar = param(5, state, ?\s)
          exponentchar = param(6, state, nil)
          arg = state.next_arg
          if arg.respond_to? :to_f
            num = arg.to_f
            n = num == 0.0 ? 0 : Math.log10(num.abs).floor + 1
            ee = edigits.nil? ? 4 : edigits + 2
            ww = w.nil? ? nil : w - ee
            if d.nil?
              q = num.to_s.length
              d = Math.max(q, Math.min(n, 7))
            end
            dd = d - n
            if 0 <= dd and dd <= d
              state.push_back_arg
              parameters = [
                Parameters::Integer.new(@pos, ww),
                Parameters::Integer.new(@pos, dd),
                Parameters::Default.new(@pos),
                overflowchar.nil? ?
                  Parameters::Default.new(@pos) : 
                  Parameters::Character.new(@pos, overflowchar),
                padchar.nil? ?
                  Parameters::Default.new(@pos) :
                  Parameters::Character.new(@pos, padchar),
              ]
              Factory.build(parameters, @modifiers, ?F, nil,
                            @pos).execute(state)
              Factory.build([Parameters::Integere.new(@pos, ee)], @modifiers,
                            ?T, nil, @pos).execute(state)
            else
              state.push_back_arg
              Factory.build(@params, @modifiers, ?E, nil, @pos).execute(state)
            end
          elsif arg.respond_to? :to_int
            state.push_back_arg
            parameters = @params[0].nil? ? [] : [@params[0]]
            Factory.build(parameters, [], ?D, nil, @pos).execute(state)
          else
            arg_error 'argument is not a number or a number string'
          end
        end