Befunge - 37 x 5 = 185 38 x 3 = 114 caracteres
Isso é limitado a números inteiros, pois o Befunge não possui suporte a ponto flutuante.
&v /& _ #`&# "-"$# -#< v
>~:0`!#v_:" "`! #v_:","`#^_"*"`#v_&*>
^ ># $ .# @#< >&+
Explicação
A maior característica distintiva do Befunge é que, em vez de ser um conjunto linear de instruções, como a maioria dos idiomas; é uma grade 2D de instruções de caracteres únicos, onde o controle pode fluir em qualquer direção.
O primeiro &simplesmente digita o primeiro número. O ve> seguida, redirecione o controle para o caminho principal na segunda linha.
~:0`!#v_
Isso insere um caractere ( ~), duplica-o ( :), empurra zero para a pilha ( 0), exibe os dois elementos superiores e determina se o segundo é maior que o primeiro (` estou surpreso que você não possa usar `` para obter backticks de código. ), inverte a veracidade do elemento superior ( !) e, então, vai para a direita se for zero; caso contrário, para baixo ( #v_).
Basicamente, está verificando se a entrada -1não representa mais entrada.
># $ .# @
Se a entrada foi -1, o valor duplicado é descartado ( $), a parte superior da pilha é exibida como um número inteiro (. ) e o programa é interrompido ( @).
:" "`! #v_
Caso contrário, um processo semelhante é repetido para determinar se a entrada é menor ou igual a um espaço. Se for um espaço, o controle será desativado; caso contrário, o controle será direcionado para a direita.
^ ># $ .# @#<
Se for um espaço, será redirecionado para a esquerda ( <); o programa halt ( @), output ( .) e redirecionamento direito ( >) são todos ignorados usando #; mas o descarte é executado para remover o espaço da pilha. Finalmente, ele é redirecionado para iniciar a próxima execução ( ^).
:","`#^_
Se não fosse um espaço, o mesmo processo é usado para dividir se estiver dentro [+, *]ou [-, \]indo para a direita e para cima, respectivamente.
>~ "*"`#v_&*>
^ >&+
Pois [+, *]é novamente dividido para determinar se é um +ou a *. Se +for direcionado para baixo, o próximo número será inserido ( &) e eles serão adicionados ( +), o controle se moverá e será redirecionado para o caminho principal do próximo caractere. Se, *então, ele entra ( &) e multiplica (* ), então envolve diretamente.
/& _ #`&# "-"$# -#<
Para [-, \]isso começa no cabeçalho direito à esquerda. Eles #pulam o caractere depois deles, então o caminho inicial é o "-"`_que simplesmente determina se é -ou /. Se for, /então continua a esquerda para inserir ( &) e dividir ( /). Se estiver, -então ele vai para a direita, pulando novamente os caracteres para que seja executado, &"-"$-resultando no número que está sendo inserido ( &), o -caractere sendo empurrado para a pilha e depois descartado ( "-"$) e, em seguida, a subtração sendo calculada ( -). O controle é então redirecionado de volta ao caminho principal.