수레가없는 부동 소수점 추가!


9

당신의 작업은 분수 또는 부동 소수점 수학을 사용 하지 않고 두 개의 부동 소수점 숫자를 더하는 프로그램을 모든 언어로 작성하는 것 입니다. 정수 수학이 허용됩니다.

체재

숫자의 형식은 IEEE 754 32 비트 float 의 2 진 값을 나타내는 1과 0을 포함하는 문자열 입니다. 예를 들어 숫자 2.54는 문자열 "01000000001000101000111101011100"으로 표시됩니다.

프로그램은 위에서 언급 한 형식으로 두 개의 숫자를 입력하고 함께 더한 다음 동일한 형식으로 결과를 출력해야합니다. 모든 언어에서 가장 짧은 답변이 이깁니다!

규칙

부동 소수점, 십진 또는 정수가 아닌 수학 함수는 절대 허용되지 않습니다.

입력이 깨끗하다고 ​​가정 할 수 있습니다 (예 : 1과 0 만 포함).

입력이 숫자이며 Inf, -Inf 또는 NaN이 아닌 숫자라고 가정 할 수 있습니다. 그러나 결과가 최대 값보다 크거나 최소값보다 작은 경우 각각 Inf 및 -Inf를 반환해야합니다. 비정규 (비정상) 결과는 0으로 플러시 될 수 있습니다.

반올림을 올바르게 처리하지 않아도됩니다. 결과가 몇 비트인지 걱정하지 마십시오.

테스트

프로그램을 테스트하기 위해이 도구를 사용하여 10 진수와 부동 소수점 이진수를 변환 할 수 있습니다 .

1000 + 0.5 = 1000.5

01000100011110100000000000000000 + 00111111000000000000000000000000 = 01000100011110100010000000000000

float.MaxValue + float.MaxValue = 무한대

01111111011111111111111111111111 + 01111111011111111111111111111111 = 01111111100000000000000000000000

321.123 + -123.321 = 197.802

01000011101000001000111110111110 + 11000010111101101010010001011010= 01000011010001011100110101010000

행운을 빕니다!

답변:


3

파이썬, 224 자

이 코드는 부동 소수점 입력 f을 integer 로 변환하고 f*2^150python native big integers를 사용하여 더한 다음 다시 변환합니다.

V=lambda x:((-1)**int(x[0])<<int(x[1:9],2))*int('1'+x[9:],2)
B=lambda x,n:B(x/2,n-1)+'01'[x&1]if n else''
def A(x,y):
 v=V(x)+V(y)
 s=e=0
 if v<0:s=1;v=-v
 while v>=1<<24:v/=2;e+=1
 if e>254:v=0
 return'%d'%s+B(e,8)+B(v,23)

3

J (172 자)

IEEE 754는 5 개의 반올림 규칙을 허용하므로 "0으로"규칙을 선택했습니다. 내 코드는 다음과 같습니다.

b=:(_1&^)@".@{.*[:#.1x,("."0)@(9&}.),#.@:("."0)@}.@(9&{.)$0:
a=:b@[([:,(<&0)":"0@:,,@((8$2)&#:)@(-&24)@$@#:,}.@(24&{.)@#:@|)@(]`(**2x^278"_)@.((>&((2x^278)-2x^254))@|))@+b@]

당신이주는 매우 동일한 예 (그러나 다른 반올림 규칙으로 인해 정확히 동일한 결과는 아님) :

   '01000100011110100000000000000000' a '00111111000000000000000000000000'
01000100011110100010000000000000
   '01111111011111111111111111111111' a '01111111011111111111111111111111'
01111111100000000000000000000000
   '01000011101000001000111110111110' a '11000010111101101010010001011010'
01000011010001011100110101001111
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.