(당분간 "C"라는 질문에 태그를 달았습니다. 그러나 공용체를 지원하는 다른 언어를 알고 있다면 사용할 수도 있습니다.)
당신의 임무는 + - * /
다음 구조체에 대한 네 가지 표준 수학 연산자 를 작성하는 것입니다.
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;}
}
연산 자체는 항상 정수 부분을 조작하거나 액세스하므로 (연산 중 언제든지 더블과 비교하지 않음) 결과는 정확히 동일합니다 (또는 숫자가 아닌 결과와 같은 경우 기능적으로 동일 NaN
) 해당 수학적 연산이 double
대신 에 바로 적용된 것처럼 .
조작 할 정수 부분을 선택할 수 있습니다 (아마도 다른 연산자 중 하나를 사용하여). (내가 원하는지 확실하지 않지만 조합의 모든 필드에서 "서명되지 않은"을 제거하도록 선택할 수도 있습니다.)
점수는 네 개의 연산자 각각에 대한 문자 길이의 문자 길이를 합한 것입니다. 최저 점수가 이깁니다.
는 IEEE 754 규격에 익숙하지 않은 우리의 사람들을 위해, 여기 위키 백과에 대한 기사입니다.
편집 :
03-06 08:47 intfloat 구조체에 생성자를 추가했습니다. double / etc를 수동으로 설정하는 대신 테스트에 사용할 수 있습니다.
1
이케 스! 해결책이 있다고 말해주세요.
—
dmckee --- 전 운영자 고양이 4
음 ... 아마도 정의하는 것이 좋습니다 것
—
dmckee --- ex-moderator 고양이
intstruct
의 관점에서 uint8_8
, uint16_t
등의 절대 크기로에 short
, int
등등 표준에 의해 정의되지 않은 (각 유형의 최소 크기를 가지며, 크기에있어서 엄격한 순서가 있지만, 그게 다야).
나는 이것이 ungolfed 경우에도 훌륭한 (그리고 도전적인) 연습 같아요
—
John Dvorak
이 질문에는 반올림 처리 방법과 좋은 테스트 스위트에 대한 문서가 사용될 수 있습니다.
—
피터 테일러
나는 그것이 사양에 있다고 확신하지만 실제 사양은 수백 달러가 될 것입니다. 무료로 제공되는 설명이있을 수 있지만, IMO는 질문자에게 그러한 종류의 세부 정보 (또는 적어도 몇 년 안에있을 가능성이있는 사이트에 대한 링크)를 포함시켜야합니다. 질문이 실제로 원하는 것을 알기 위해 필요한 자료를 스스로 찾아 가야합니다.
—
피터 테일러