(Eu marquei a pergunta "C" por enquanto, mas se você souber de outro idioma que suporte sindicatos, também poderá usá-lo.)
Sua tarefa é criar os quatro operadores matemáticos padrão + - * /
para a seguinte estrutura:
union intfloat{
double f;
uint8_t h[8];
uint16_t i[4];
uint32_t j[2];
uint64_t k;
intfloat(double g){f = g;}
intfloat(){k = 0;}
}
de modo que as próprias operações apenas manipulem ou acessem a parte inteira (portanto, não há comparação com o dobro a qualquer momento durante a operação), e o resultado é exatamente o mesmo (ou funcionalmente equivalente, no caso de resultados não numéricos como NaN
) como se a operação matemática correspondente tivesse sido aplicada diretamente ao double
invés.
Você pode escolher qual parte inteira manipular, talvez até usando diferentes entre operadores diferentes. (Você também pode optar por remover o "não assinado" de qualquer um dos campos da união, embora não tenha certeza se deseja fazer isso.)
Sua pontuação é a soma do comprimento do código em caracteres para cada um dos quatro operadores. Menor pontuação ganha.
Para aqueles que não estão familiarizados com a especificação IEEE 754, aqui está um artigo sobre ela na Wikipedia.
Editar% s:
03-06 08:47 Adicionados construtores à estrutura intfloat. Você pode usá-los para testes, em vez de definir manualmente o dobro / etc.
fonte
intstruct
em termos deuint8_8
,uint16_t
e assim por diante, como os tamanhos absolutos deshort
,int
e assim por diante, não são definidos pelo padrão (cada tipo tem um tamanho mínimo e há uma ordem estrita de tamanho, mas é isso aí).Respostas:
C ++, ~ 1500 caracteres
Expande os flutuadores em uma representação de ponto fixo de 8000 dígitos binários, realiza as operações e depois converte novamente.
Estou com preguiça de remover todos os espaços e novas linhas para obter uma contagem exata do golfe, mas são cerca de 1500 caracteres.
fonte