KR102281047B1 - 4개의 입력 내적 회로를 사용하는 삼각 함수 계산 - Google Patents

4개의 입력 내적 회로를 사용하는 삼각 함수 계산 Download PDF

Info

Publication number
KR102281047B1
KR102281047B1 KR1020170043158A KR20170043158A KR102281047B1 KR 102281047 B1 KR102281047 B1 KR 102281047B1 KR 1020170043158 A KR1020170043158 A KR 1020170043158A KR 20170043158 A KR20170043158 A KR 20170043158A KR 102281047 B1 KR102281047 B1 KR 102281047B1
Authority
KR
South Korea
Prior art keywords
expx
adder12
adder34
bit
equal
Prior art date
Application number
KR1020170043158A
Other languages
English (en)
Other versions
KR20170123230A (ko
Inventor
중 레판
리 구어송
왕 첸유
조 루이
Original Assignee
비반테 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 비반테 코포레이션 filed Critical 비반테 코포레이션
Publication of KR20170123230A publication Critical patent/KR20170123230A/ko
Application granted granted Critical
Publication of KR102281047B1 publication Critical patent/KR102281047B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/548Trigonometric functions; Co-ordinate transformations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2101/00Indexing scheme relating to the type of digital function generated
    • G06F2101/04Trigonometric functions

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • Nonlinear Science (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • Complex Calculations (AREA)

Abstract

입력값(x)에 대한 인수(t = x/pi)를 근사화하기 위해, 4개의 요소 내적 회로(DP4)를 사용하는 회로가 기재된다. 그 후, 상기 인수는 SinPi() 또는 CosPi()와 같은 삼각 함수로 입력된다. 상기 DP4 회로는 pi 의 역수의 표시값의 x 배를 계산한다. 사용되는 pi의 역수의 비트는, x 의 지수의 크기에 기초하여 선택된다. 상기 DP4 회로는 4개의 승산기, 2개의 중간 가산기, 및 최종 가산기를 포함한다. 상기 승산기, 중간 가산기, 및 최종 가산기의 출력값은, 최종 가산기의 출력값이 삼각 함수로 입력될 때 정확한 출력값을 제공할 인수(t)의 값이도록 조정된다.

Description

4개의 입력 내적 회로를 사용하는 삼각 함수 계산{CALCULATING TRIGONOMETRIC FUNCTIONS USING A FOUR INPUT DOT PRODUCT CIRCUIT}
본 발명은 전자 회로를 이용하여 삼각 함수를 계산하는 단계를 수행하기 위한 시스템 및 방법에 관한 것이다.
통상적인 컴퓨터 시스템에 있어서, 삼각 함수는 (a) 원시적 수학 연산(덧셈, 뺄셈, 곱셈, 나눗셈 등)을 이용하여 삼각 함수를 계산하는 일련의 컴퓨터 명령, (b) 특별한 입력 인수(argument) 또는 인수 집합에 대한 삼각 함수의 출력값을 보간하는 데 사용되는 룩업 테이블(look up table), (c) 삼각 함수를 연산하도록 특별히 프로그램된 전용 회로로서 실시된다. 이들 모든 접근 방식은 (a) 삼각 함수가 복잡하기 때문에, 매우 느리고, (b) 상기 룩업 테이블이 작은 느린 정밀도를 갖거나 또는 매우 큰 룩업 테이블을 요구하는 높은 정밀도를 가지며, (c) 크기 제한 내에서 사용할 수 없는 실리콘 칩 상의 넓은 영역을 요구한다.
삼각 함수의 계산에 대한 일반적인 접근 방식은, sinPi(t) = sin(π*t), cosPi(t) = cos(π*t), tanPi(t) = tan(π*t) 등으로서 상기 함수를 연산하도록, 삼각 함수 회로를 정의하는 것이며, 여기서 상기 x 는 입력 인수이다. 상기 입력 인수가 종종 π 의 배수보다는 라디안으로 표시되기 때문에, 이러한 함수에 대한 입력 인수는 t = x/π 로서 계산되어야만 하며, 여기서 상기 x 는 라디안으로 표시된 입력 인수이다. 따라서 입력 인수를 계산하는 단계는, 프로세싱 시간이 소요되거나 또는 칩 상에 공간을 요구하는 추가적인 프로세싱을 요구한다.
여기에 기재된 시스템 및 방법은 입력 인수(t = x/π)를 계산하기 위한 개선된 접근 방식을 제공한다.
본 발명의 이점이 용이하게 이해될 수 있도록, 위에 간략히 기재된 본 발명의 보다 특별한 기재는 첨부된 도면에 도시된 특정 실시예를 참조함으로써 제공될 것이다. 이들 도면이 본 발명의 전형적인 실시예만을 도시하고 있고 또한 이에 따라 그 범주를 제한하는 것으로는 고려되지 않으며, 본 발명은 첨부한 도면의 사용을 통해 추가적인 특이성 및 세부 사항에 대해 기재되고 설명될 것임을 인식해야 한다.
도 1은 본 발명의 실시예에 따라 삼각 함수를 연산하기 위한 성분의 개략적인 블록도이다.
도 2a 내지 2f는 본 발명의 실시예에 따라 4개의 내적(Dp4) 회로를 사용하여 t = x/π 를 연산하기 위한 방법의 프로세스 흐름도이다.
도 3은 여기에 기재된 회로가 실시될 수 있는 연산 디바이스의 다이아그램이다.
일반적으로 여기에서 기재되고 또한 도면에 도시된 바와 같이, 본 발명의 성분은 광범위한 상이한 구성으로 배치되고 설계될 수 있음이 용이하게 인식될 것이다. 따라서 도면에 나타나는 바와 같이, 본 발명의 실시예의 이하의 더욱 상세한 기재는, 청구된 바와 같이, 본 발명의 범위를 제한하는 것으로 의도되지 않지만, 그러나 단지 본 발명에 따라 현재 고려되는 실시예의 어떤 예를 나타내는 것이다. 여기에 기재된 실시예는 도면을 참조하여 가장 잘 이해될 것이며, 유사한 부분은 전체적으로 유사한 도면부호에 의해 표시된다.
본 발명에 따른 실시예는 장치, 방법, 또는 컴퓨터 프로그램 제품으로서 실시될 수 있다. 따라서 본 발명은 완전한 하드웨어 실시예, 완전한 소프트웨어 실시예(펌웨어, 상주 소프트웨어, 마이크로-코드 등을 포함하는), 또는 여기에서 "모듈" 또는 "시스템"으로서 모두 일반적으로 언급될 수 있는 소프트웨어와 하드웨어 양태를 조합한 실시예의 형태를 취할 수 있다. 또한, 본 발명은 매체에 실시된 컴퓨터-사용 가능 프로그램 코드를 갖는 임의의 유형의 표현 매체로 실시된 컴퓨터 프로그램 제품의 형태를 취할 수 있다.
비-일시적 매체를 포함하여, 하나 또는 이상의 컴퓨터-사용 가능한 매체 또는 컴퓨터-판독 가능한 매체의 임의의 조합이 이용될 수 있다. 예를 들어, 컴퓨터-판독 가능한 매체는 휴대용 컴퓨터 디스켓, 하드 디스크, 랜덤 액세스 메모리(RAM) 디바이스, 판독-전용 메모리(ROM) 디바이스, 삭제 가능한 프로그램 가능한 판독-전용 메모리(EPROM 또는 플래시 메모리) 디바이스, 휴대용 콤팩트 디스크 판독-전용 메모리(CDROM), 광학 저장 디바이스, 및 자기 저장 디바이스를 포함할 수 있다. 선택된 실시예에 있어서, 컴퓨터 판독-가능한 매체는 명령 실행 시스템, 장치, 또는 디바이스에 의해 또는 이와 관련하여 사용하기 위한 프로그램을 포함할 수 있고, 저장할 수 있고, 통신할 수 있고, 전파할 수 있고, 또는 전송할 수 있는 임의의 비-일시적 매체를 포함할 수 있다.
본 발명의 동작을 수행하기 위한 컴퓨터 프로그램 코드는, 자바, 스몰토크(Smalltalk), C ++ 등과 같은 객체-지향 프로그래밍 언어 및 "C" 프로그래밍 언어 또는 이와 유사한 프로그래밍 언어와 같은, 통상적인 절차 프로그래밍 언어를 포함하는 하나 또는 그 이상의 프로그래밍 언어의 임의의 조합으로 기재될 수 있다. 프로그램 코드는 독립형 소프트웨어 패키지 상에서, 독립형 하드웨어 유닛 상에서 완전히, 상기 컴퓨터로부터 약간의 거리로 이격된 원격 컴퓨터 상에서 부분적으로, 또는 원격 컴퓨터나 서버 상에서 완전히 실행될 수 있다. 후자의 시나리오에서, 상기 원격 컴퓨터는 근거리 통신망(LAN) 또는 광역 네트워크(WAN)를 포함하는 임의의 타입의 네트워크를 통해 컴퓨터에 접속될 수 있거나, 또는 상기 접속은 외부 컴퓨터에 이루어질 수 있다[예를 들어, 인터넷 서비스 제공자(Internet Service Provider)를 사용하여 인터넷을 통해].
본 발명은 본 발명의 실시예에 따른 방법, 장치(시스템), 및 컴퓨터 프로그램 제품의 흐름도 및/또는 블록도를 참조하여 이하에 기재된다. 흐름도 및/또는 블록도의 각각의 블록, 및 흐름도 및/또는 블록도의 블록의 조합은, 컴퓨터 프로그램 명령 또는 코드에 의해 실시될 수 있음을 인식해야 한다. 이들 컴퓨터 프로그램 명령은, 기계를 생산하기 위해, 범용 컴퓨터, 특수 목적 컴퓨터, 또는 다른 프로그램 가능한 데이터 프로세싱 장치의 프로세서에 제공될 수 있으므로, 컴퓨터 또는 다른 프로그램 가능한 데이터 프로세싱 장치의 프로세서를 통해 실행되는 명령은 흐름도에 및/또는 블록도의 블록이나 블록들에 특정된 기능/행위를 실시하기 위한 수단을 생성한다.
이들 컴퓨터 프로그램 명령은 컴퓨터 또는 다른 프로그램 가능한 데이터 프로세싱 장치가 특별한 방식으로 기능할 수 있도록 지향시키는 비-일시적 컴퓨터-판독 가능한 매체에도 저장될 수 있으므로, 상기 컴퓨터-판독 가능한 매체에 저장된 명령은 흐름도에 및/또는 블록도의 블록 또는 블록들에 특정된 기능/행위를 실시하는 명령 수단을 포함하는 제조 물품을 생산한다.
컴퓨터 프로그램 명령은, 컴퓨터 또는 다른 프로그램 가능한 데이터 프로세싱 장치 상에서의 실행이 흐름도에 및/또는 블록도의 블록 또는 블록들에 특정된 기능/행위를 실시하기 위한 프로세스를 제공하도록, 일련의 동작 단계가 컴퓨터 또는 다른 프로그램 가능한 장치 상에 수행되어 컴퓨터 실시된 프로세스를 생산하기 위해, 컴퓨터 또는 다른 프로그램 가능한 데이터 프로세싱 장치 상에 로딩될 수도 있다.
도 1을 참조하면, 현대의 많은 연산 시스템은 내적을 연산하기 위해 전용 회로를 실시하는 범용 프로세서 또는 그래픽 처리 유닛(graphics processing unit)(GPU)을 포함한다. 예를 들어, 4개의 입력 내적(Dp4)이 통상적으로 실시되는 회로이다. Dp4 회로는 4개의 제1 입력값(u1, u2, u3, u4) 및 4개의 제2 입력값(v1, v2, v3, v4)을 수신한다. 그 후, 이들 입력값은 출력값(Mul1, Mul2, Mul3, Mul4)을 생산하는 승산기(multiplier)(100a-100d) 내로 입력된다. 예를 들어, u1 및 v1은 승산기(100a)로 입력되고, 입력값(u2, v2)은 승산기(100b)로 입력되며, 입력값(u3, v3)은 승산기(100c)로 입력되고, 입력값(u4, v4)은 승산기(100d)로 입력된다. 각각의 승산기(100a-100d)는 2개의 입력 인수가 있는 경우 곱을 출력한다. 2개의 승산기(100a, 100b)의 출력값은 제1 가산기(adder)(102a)로 입력되어, 출력값(Adder12_0)을 생산하며, 나머지 2개의 승산기(100c, 100d)의 출력값은 제2 가산기(102b)로 입력되어, 출력값(Adder34_0)을 생산한다. 상기 가산기(102a, 102b)의 출력값은, 리딩 제로를 식별하여 가산기(102a, 102b)의 출력값에 대한 지수를 결정하고, 가산기(102a, 102b)의 출력값을 적절한 가수(mantissa)(假數) 크기로 라운딩하는, 리딩 0 및 라운딩 스테이지(104)에 의해 추가로 처리될 수 있다.
그 후, 상기 리딩 0 및 라운딩 스테이지(104)의 출력값은 최종 가산기 스테이지(106)로 입력된다. 상기 최종 가산기 스테이지(106)("AdderAll")의 출력값은 제1 및 제2 입력 변수의 내적이다.
도 1에 명백한 바와 같이, Dp4 회로(100a-100d, 102a-102b, 104, 106)를 사용하여 입력 인수(t = x/π)를 연산하기 위해, 여기에 기재된 실시예에 따른 통상적인 Dp4에 다른 성분이 추가될 수 있다. 특히, 1/π 의 표시값이 승산기(100a-100d)에 제1 인수로서 입력될 수 있으며, 상기 입력 인수(x)는 승산기(100a-100d)에 제2 인수로서 입력될 수 있다. 특히, 1/π 의 표시값의 비트의 상이한 세그먼트는 인수(u1 내지 u4)로서 입력될 수 있고, 제2 입력 인수는 v1 = v2 = v3 = v4 = x 로 설정된다.
인수 스테이지(108)는 u1 내지 u4 로서 입력되는 1/π 의 표시값의 부분을 연산한다. 상기 인수 스테이지(108)의 동작은 도 2a에 도시된 단계의 일부 또는 전부를 실시할 수 있다.
시프팅 스테이지(110)는, 도 2b 내지 2e에 도시된 단계의 일부 또는 전부를 수행함으로써, 승산기(100a-100d)의 출력값을 조정한다. 상기 가산기(102a, 102b)의 출력값은, 도 2e에 도시된 단계의 일부를 수행함으로써, 조정 및 부호 스테이지(112)에 의해 조정될 수도 있다. 가산기(106)의 출력값의 부호는, 도 2f의 방법을 실시함으로써, 최종 부호 스테이지(114)에 의해 조정될 수 있다.
스테이지(108, 110, 112, 114)의 동작의 결과는 (1)에 따라 입력 인수(t)를 연산하는 것이다.
Figure 112017032594825-pat00001
특히, 스테이지(108, 110, 112, 114)의 동작은 부동 소수점(floating point) 정밀도의 한계 내에서 (1)에 근사해야 한다. 이 적용을 위해, 방정식의 "근사값"은 방정식의 출력값을 나타내는 데 사용된 부동 소수점 포맷의 10 ULP(unit in last place)(마지막 위치의 단위) 내에서 상기 방정식의 출력값과 근사하다는 것을 의미한다. 마찬가지로, 여기에 수학 함수로서 도시된 임의의 연산은, 그 수학 함수를, 상기 수학 함수의 출력값의 부동 소수점 표시값의 10 ULP 내로 근사시키는 부동 소수점 동작을 기재하는 것으로 이해될 수 있다.
(1)에 대한 동기는 t = x/π 를 계산할 때 중간값을 나타내는 데 사용할 수 있는 제한된 비트수로 인한 에러를 피하는 것이다. 수는 지수(expV), 가수(mantissaV), 및 부호(signV)의 3개의 부분을 포함하는 부동 소수점 값(V)으로서 표시될 수 있다. 일부 표시값에 있어서, 임의의 부동 소수점 값(V)은 (2)에 따라 이들 3개의 부분을 사용하여 근사될 수 있으며, 여기서 #BitsMantissaV 는 가수를 나타내는 데 사용되는 비트수이다.
Figure 112017032594825-pat00002
signV 는 2진수이며, 또한 값(V)이 음수인지의 여부(1 -> 음수인지, 0 -> 음수가 아닌지의 여부)를 나타낸다. expV 는 값(V)의 크기를 나타내는 정수이고, 정수 mantissaV 는 데이터의 정밀도이다.
Dp4 의 일부 실시에 있어서, 4개의 승산기(100a-100d)는 48 비트 가수를 각각 출력한다. 상기 가산기(102a, 102b)는 72 비트 가수(Adder12_0, Adder34_0)를 출력하고, 그 후 48 비트 가수로 라운딩한다. u1*v1 + u2*v2 에서 비트 삭제가 있을 수 있기 때문에, Adder12_0의 리딩 0 위치를 찾아, 리딩 0 위치로부터 48 비트 가수를 유지해야만 한다.
최종 가산기(106)는 모두 48 비트 가수를 갖는 2개의 입력값을 가지며, 표준 32 비트 부동 소수점 값(23 비트 가수 + 1 비트 hind 1)을 출력한다.
승산기(100a-100c)의 부동 내측에서, 부동 소수점 값을 지수 및 가수로 분리시킨다. 승산기(100a-100c)의 결과는 새로운 가수 = mantissaU1*mantissaV1(48 비트) 및 새로운 지수 = exponentU1 + exponentV1 + 1 로서 간주될 수 있다.
삼각 함수[Sin(x), Cos(x), Tan(x)]를 계산할 때, 전술한 바와 같이, 함수를 Sin(x) = SinPi(x/π) 로서 계산할 수 있는데, 그 이유는 높은 정밀도의 SinPi(t) 명령이 가능하기 때문이다. 그러나 t = x/π 를 프로세싱할 때, 문제가 있다. 만일 |x| <2-126*π 이라면, t 는 비정상적인 수(2-126 미만) 이다. 일부 프로세싱 디바이스가 비정상적인 수를 지원하지 않기 때문에, 이러한 작은 값은 0 으로서 해석될 것이다. 따라서 |x| < 2-126 *π 에 대해, Sin(x) = SinPi(t) = 0 이다. 정확한 값이 실제로 x 에 매우 가깝기 때문에, 상대 오차는 100% 이다. 다른 문제는 t = x/π 의 정밀도를 유지하는 방법이다. x 가 매우 클 때(226 초과), t = x/π 의 정상적인 부동 소수점 계산은 정수 부분만 유지할 수 있으며, 이는 Sin(x) = SinPi(t) = 0 이 되게 한다. 상대 오차 또한 100% 이다.
Sin(x) 를 정확하게 계산하는 많은 방법이 있다. 가장 유명한 방법은 "페인 및 하넥의 감소 방법(Payne and Hanek's reduction method)"이며[엠. 페인 및 알.하넥(M. Payne and R. Hanek), "삼각 함수를 위한 라디안 감소", SIGNUM 뉴스레터, 18:19-24, 1983)], 이는 여기에 그 전체가 참조 인용되었다. 그러나 이 방법을 직접 실시하는 것은 많은 명령을 요구할 것이다. 여기에 기재된 실시예에 있어서, 통상적인 Dp4 회로는 x 의 실수 값에 대해 (3)을 계산하도록 수정된다.
Figure 112017032594825-pat00003
수학적으로, Sin(x) = Sin(π*t) = SinPi(t) 이고, 이 공식에 대해 |t| ≤ .5 이다. 그러나 |x| < 2-126*π 이라면, (3)의 출력값은 |x|/π 에서 비정상적인 부동 소수점 값이다. 이 경우를 정확하게 다루기 위해, t 는 (4)에 따라 결정된다.
Figure 112017032594825-pat00004
|t| < 2.0 에 대해 SinPi(t)를 계산하기 위해, t 가 SinPi() 파이프라인을 통과할 때, |t| >= 2.0 일 때 t/2128(입력값의 지수 조정)로 복귀시키기 위해 SinPi 파이프라인을 약간 변화시킨다. 따라서 수학적으로 t 는 (1)에 따라 결정된다.
도 2a 내지 2f를 참조하면, 도시된 방법은 (1)에 따라 t = x/π 의 근사값을 출력하여, 최종 계산의 정확도를 향상시키고 또한 많은 연산 시스템에서 일반적으로 사용 가능한 회로를 사용하여 이를 수행하기 위해, Dp4 회로의 중간값 및 최종값을 변환하는 스테이지(108, 110, 112, 114)의 함수를 도시하고 있다.
특히 도 2a를 참조하면, 값("Fraction_RCP_PI")은 방법(2A)을 실시하는 회로에 사전에 정의되고 저장될 수 있으며, Fraction_RCP_PI 는 1/π 의 근사값이다. 일부 실시예에 있어서, Fraction_RCP_PI 는 216 비트 값: Fraction_RCP_PI [215:0]={0xa2f983_6e4e44_1529fc_2757d1_f534dd_c0db62_95993c_439041_fe5148} 이다.
도 2a의 방법은 x 의 크기에 따라 Fraction_RCP_PI 의 일부를 선택하는 단계를 포함한다. 예를 들어, 상기 방법은 x 로부터 지수 부분(expX)을 얻는 단계(200), 및 expX 가 25 이상인지의 여부를 평가하는 단계(202)를 포함할 수 있다. 만일 그렇지 않다면, 값(Fraction_EffectBits)은 Fraction_RCP_PI [215:215-95], 즉 Fraction_RCP_PI 의 처음 96 비트와 동일하게 설정된다[단계(204)]. 만일 그렇다면, Fraction_EffectBits 는 Fraction_RCP_PI[215-expX+25:215-expX+25-95]와 동일하게 설정되며[단계(2036)], 즉 expX 가 25 를 초과하는 양만큼 96 비트 윈도우가 우측(더 적은 중요도)으로 이동한다 .
Fraction_EffectBits 의 상이한 부분 및 x(manX)의 가수는, 승산기(100a-100c) 내로 입력된다. 특히 Fraction_EffectBits 는 high, mid, low1, low2 값으로 나눠질 수 있으며, 여기서 high = Fraction_EffectBits[95:72], mid = Fraction_EffectBits[71:48], low1 = Fraction_EffectBits[47:24], low2 = Fraction_EffectBits[23:0] 이다. 달리 언급하면, Fraction_EffectBits = {high[23:0], mid[23:0], low1[23:0], low2[23:0]} 이며, 여기서 {}는 연쇄(concatenation)를 표시한다.
도 2a에 도시된 바와 같이, 승산기(100a-100d)는 값(Mul1)을 manX*high 로서 계산하고[단계(208)]; 값(Mul2)을 manX*mid 로서 계산하며[단계(210)]; 값(Mul3)을 manX*low1 로서 계산하고[단계(212)]; 값(Mul4)을 manX*low2 로서 계산한다[단계(214)]. 별도의 회로가 각각의 승산기(100a-100c)를 실시할 수 있는 한, 단계(208-214)는 병렬로 수행될 수 있다.
Mul1 내지 Mul4 를 위해 사용된 Fraction_EffectBits 에 대한 지수는, 값(ExpOfFraction_EffectBits)을 (expX> = 25)?-2+25-expX:-2 의 표현의 출력값으로서 계산함으로써[단계(216)] 계산되며, 여기서 (a?b:c) 는 a 가 true(1) 이면 b 를 출력하고 a 가 false(0) 이면 c 를 출력하는 3항 연산자(ternary operator)이다. Fraction_EffectBits(high, mid, low1 및 low2)의 부분에 대한 지수(expHigh, expMid, expLow1, expLow2)는 단계(218-224)에서 다음과 같이 계산된다.
expHigh = ExpOfFraction_EffectBits
expMid = expHigh-24
expLow1 = expHigh-48
expLow2 = expHigh-72
전술한 바와 같이, 승산할 때는 인수의 가수가 승산되고, 지수가 가산된다. 따라서 각각의 승산기 출력값(Mul1, Mul2, Mul3 및 Mul4)에 대해, 대응하는 지수는 각각 expX+expHigh, expX+expMid, expX+expLow1, 및 expX+expLow2 로 될 것이다.
도 2b를 참조하면, (1)을 실시하여 정밀도의 손실을 피하기 위해, 승산기(100a-100d)의 출력값(즉, 가수 부분)이 조정될 수 있다.
가산기(102a)는 단계(226)에서 Mul1 및 Mul2 를 수신하여, 그 총합을 출력한다. Mul1 및 Mul2 는, 이들이 단순히 가산기(102a)로 입력되지 않도록, 시프트되고 프로세스될 수 있다. 예를 들어, Mul1[47:0] 및 Mul2[47:24]는 가산기(102a)로 입력될 수 있다. 그 후, 가산기의 출력값은 비트 Bit[71:0] 를 갖는 값(Adder12_0)을 얻기 위해 Mul2[23:0] 와 연쇄된다.
단계(228)에서는, expX 와 25 중 큰 값과 동일한 값(expX')이 계산될 수 있다. 단계(230)에서 expX' 가 0 미만으로 판단되면, 프로세싱은 이하에 기재되는 도 2c로 계속된다. 단계(232)에서 expX' 가 2 이상으로 판단되면, 단계(234)에서 Bit[71:73-expX']가 0 으로 설정된다.
expX' 가 1 이상으로 판단되면[단계(236)], Bit[72-expX'] 는 (isSin ? Bit[72-expX'] : Bit[72-expX']^Bit[71-expX'])와 동일하게 설정되며[단계(238)], 여기서 isSin은 t 가 SinPi()로의 입력 인수로 사용될 것임을 나타내는 연산 코드(opcode)가 수신되면 1 이다. 본 기재의 목적상, 기호 "^" 는 XOR(배타적 논리합) 연산을 표시한다. expX' 가 1 이상으로 판단되면[단계(236)], 값(FinalSign)은 Bit[72-expX'] 와 동일하게 설정되며[단계(240)], 여기서 FinalSign 은 아래에 기재되는 바와 같이 가산기(106)의 출력값의 부호를 변경하는 데 사용된다. 마찬가지로, expX' 가 1 이상으로 판단되면[단계(236)], Bit[72-expX'] 는 0 과 동일하게 설정된다[단계(242)].
expX' 가 1 이상으로 판단되지 않고[단계(236)], 또한 expX' 가 0 보다 작지 않다면, FinalSign 은 (isSin? 0:Bit[71])과 동일하게 설정된다[단계(244)].
두 경우에 있어서, FinalSign 은 가산기(106)의 출력값을 조정하는 데 사용하기 위해 출력되며[단계(246)], Bit[71-expX'] 는 Bit[71-expX]^isCos 와 동일하게 설정되며[단계(248)], 여기서 상기 isCos 는 CosPi()의 근사값이 SinPi(t)를 실시하는 회로의 출력값을 조작함으로써 얻어질 수 있더라도, CosPi()를 계산하기 위해 t 가 사용된다는 것을 표시하는 수신된 연산 코드이다. 일부 실시예에서는, 단일 플래그가 설정되며, 즉 isSin 은 연산 코드가 SinPi(t) 가 계산되는 것을 표시한다면 1 일 수 있고, 그렇지 않다면 0 일 수 있다. 플래그 isCos 는 NOT(isSin)과 동일하게 설정될 수 있다.
도 2c를 참조하면, expX' 가 0 미만으로 판단되면[단계(230)], FinalSign 은 0(부호 변경 없음) 으로 설정될 수 있으며[단계(250)], 또한 값(S34From12)은 0 으로 설정되며[단계(252)], 값(S34From12)의 사용은 도 2e에 대해 아래에 기재되는 바와 같이 가산기(102b)의 출력값의 부호를 조정하는 데 사용된다. 리딩 0 및 라운딩의 식별이 수행되어[단계(254)], Adder12_0 및 expX' 에 각각 기초한 가수 및 지수를 갖는 새로운 부동 소수점 값(Adder12_1)으로 나타나며, 이는 본 기술 분야에 알려진 바와 같이 Adder12_0 에서 리딩 0 의 위치에 따라 조정된다. Adder12_1 은 (isSin ? Adder12_1:-Adder12_1)과 동일하게 설정될 수 있다[단계(256)].
expX' 가 0 미만으로 판단되지 않으면[단계(230)], 도 2b의 단계에 이어 도 2d의 단계가 실행된다. 특히, Bit[71-expX'] 가 1 과 동일한 것으로 판단되면[단계(258)], S34From12 는 Bit[71-expX'] 와 동일하게 설정되고[단계(260)], Bit[71-expX':0] 는 Bit[71-expX':0] 의 2개의 인사말(compliment)과 동일하게 설정된다[단계(262)]. 그 후, S34From12 가 출력되고[단계(264)], Adder12_1 을 얻기 위해 단계(254)와 동일한 방식으로 Adder12_0 에 대해 리딩 제로 및 라운딩의 식별이 수행된다[단계(266)].
도 2b 내지 2d의 프로세싱은 가산기(102a)의 출력값에 대해 수행된다. 도 2e의 프로세싱은, 가산기(102b)의 출력값을 프로세스하기 위해, 도 2b 내지 도 2d의 프로세싱과 병렬로 수행될 수 있다.
Mul3[47:0] 및 Mul4[47:24] 를 가산기(102b) 내로 입력하고, 상기 가산기(102b)의 출력값을 Mul4[23:0] = 0, 즉 24 비트의 0 과 연쇄시킴으로써, 값(Adder34_0)이 계산될 수 있다[단계(268)]. 그 후, Adder12_0 에 대해 전술한 바와 동일한 방식으로 Adder34_0 에 대한 리딩 0 및 라운딩의 식별을 수행함으로써[단계(270)], 값(Adder34_1)이 계산된다. S34From12 가 1 인 것으로 판단되면[단계(272)], Adder34_1 의 부호가 변경된다. Adder34_1 의 값은, [(expX' < 0 && isCos)? 0.5:Adder34:0] 과 동일하게 추가로 설정된다[단계(276)].
도 2f를 참조하면, 그 후, 도 2b 내지 도 2f의 단계로부터 출력되는 바와 같이, Adder12_1 및 Adder34_1 을 가산기(106)에 입력하고 또한 AdderAll_0 을 가산기(106)의 출력값으로서 수신함으로써, 값(AdderAll_0)이 계산될 수 있다[단계(278)]. FinalSign 이 1 인 것으로 판단되면[단계(280)], AdderAll_0 의 부호가 변경된다. 두 경우에 있어서, AdderAll_0 이 출력되어, SinPi(t), CosPi(t), TanPi(t) 와 같은 삼각 함수 회로 또는 다른 삼각 함수를 위한 입력 인수(t)로서 사용된다. 특히, 상기 연산 코드가 isSin 인 경우, t 는 SinPi(t)에 대응하는 삼각 함수 회로로 입력된다. 연산 코드가 isCos 인 경우, t 는 CosPi(t)에 대응하는 삼각 함수 회로로 입력된다. 다른 연산 코드는 다른 삼각 함수 회로에 상기 t 의 입력을 호출할 수 있다.
입력 인수[t(AdderAll_0)]는, 리딩 0 및 라운딩 단계(266, 270)에 따라 결정되는 바와 같이, Adder12_1 및 Adder34_1 의 가수 및 지수에 따라 결정된 가수(ManT) 및 지수(ExpT)를 포함한다. 일부 실시예에 있어서, t > = 2 이라면, t 는 SinPi()에 t 를 입력하기 전에 t/(2128 ) 와 동일하게 설정된다. 이는 간단한 동작이며, 또한 ExpT:ExpT = ExpT - 128 에서의 작업만을 요구한다.
전술한 회로가 어떻게 이용될 수 있는지에 대한 설명 및 예가 이하에 기재된다.
입력값이 부동 포맷 x, expX 의 지수 = exp(x), manX 의 가수 = man(x) 로 가정한다. 이 방법은 1/π 의 분수의 216 비트를 세이브하는 단계를 포함한다(1/π 의 exp 는 -2 이다). 따라서 1/π =Fraction_rcp_pi[215:0]*2- 218 이며, Fraction_rcp_pi[215] = 1 이다.
Fraction_rcp_pi 가 16 진수 형태로 기입되었다면, Fraction_rcp_pi[215:0]={0xa2f983_6e4e44_1529fc_2757d1_f534dd_c0db62_95993c_439041_fe5148} 이다. Fraction_rcp_pi 에 대한 지수 부분 = -2(최상위 비트 1 은 0.25 를 의미한다)이며, (2)가 이어진다.
expX 의 크기에 기초하여, 96 비트의 Fraction_rcp_pi 가 선택된다. 수학적으로, x/π = manX * Fraction_rcp_pi[215:0]*2(- 218 + expX-23) 이다. 이것이 완전히 실시되었다면, 24 x 216 비트 정수 승산기가 필요할 것이며, 이는 매우 큰 영역을 요구할 것이다. 그 결과가 분수에 24 비트의 가수만 유지하기 때문에, 거대한 승산기와 같은 것이 필요 없다.
expX 가 매우 클 때, x/pi 는 sin(x)의 정밀도에 쓸모 없는 많은 정수 비트를 발생시킬 것이다. 따라서 fraction_rcp_pi 의 부분이 선택된다.
Fraction_EffectBits[95:0] = (expX) ≥ 25 ? Fraction_rcp_pi[215-expX + 25:215-expX + 25-95]:Fraction_rcp_pi[215:215-95].
값(high, mid, low1, low2)은 유효 분수 Fraction_EffectBits: {high[23:0], mid[23:0], low1[23:0], low2[23:0]} = Fraction_ EffectBits[95:0] 의 96 비트로부터 선택된다 .
전술한 Dp4 엔진(도 1)은 manX*Fraction_EffectBits[95:0] 를 계산하는 데 사용된다.
manX*Fraction_ EffectBits[95:0] = manX*high + manX*mid + manX*low1 + manX*low2 = mul1 + mul2 + mul3 + mul4
ExpOfFranction_EffectBits = (expX) ≥ 25? -2 + 25 - expX:-2.
expHigh = ExpOfFranction_EffectBits, expMid = expHigh-24, expLow1 = expHigh-48 및 expLow2 = expHigh-72.
mul1 + mul2 가 임의의 삭제를 갖지 않기 때문에, Adder12_0 은 72 비트 가수(가수 Adder12_0) 및 지수 expAdder12_0 = expHigh + expX + 1 을 출력한다.
expX ≥ 25, expAdder12_0 = 24 일 때, 이는 71- 24 = 47 위치에서 1의 비트를 의미한다. mantissaExpAdder12_0[71:48] 을 제거할 수 있으며(값을 0 으로 설정할 수 있으며), 이는 x/π 의 일부 짝수 정수를 나타낸다. expMul1 = expMul2 + 2 이고 오직 48 비트 가산기만 Dp4 에 사용되기 때문에, mantissaAdder12_0[71:24] = (Mul1 [47 : 0] << 24) + Mul2 [47:24] 를 설정하고, Mul2[23:0] 를 mantissaAdder12_0[23:0] 로 통과시킨다.
변수 mantissaAdder12_0[47:47] 은 최종 결과 AdderAll 의 부호 비트이다. 그 후, 부호 비트 정보를 AddAll 로 설정한 후 FinalSign = mantissaAdder12_0[47:47] 이고, 또한 mantissaAdder12_0[47:47] 을 0 으로 설정한다.
변수 mantissaExpAdder12_0[46:46] 은 frac(|x|/π) ≥ 0.5 인지의 여부를 표시하며, 이는 식(1)의 두 번째 행 또는 첫 번째 행이 적용되는지의 여부를 결정한다. 따라서 S34From12 = mantissaExpAdder12_0[46:46] 으로 하고, mantissaExpAdder12_0[46:0] 을 다음과 같이 변경한다.
mantissaAdder12_0[46:0] = mantissaAdder12_0[46:0]^S34From12 + S34From12 (5)
S34From12 를 Adder34 의 부호 비트로서 추가로 출력한다. 식(5)은 2의 보수를 구비한 Adder12_0 부분에 대해 S34From12 = 1 일 동안
Figure 112017032594825-pat00005
를 프로세싱하고, Adder34 에 대한 부호를 변경하며, 이에 따라 뺄셈이 발생하게 한다.
이러한 변경을 한 후에, 수정된 Adder12_0 을 리딩 0 및 라운딩 단계로 출력하여, 라운딩 후 새로운 expAdder12 및 mantissaAdder12 를 구비한 Adder12 를 48 비트 정밀도로 얻는다. Adder34_0 내지 Adder34_1 은 이전 Dp4 프로세스와 동일하지만, 그러나 Adder34 의 부호 비트는 S34From12 로 변경될 수 있다.
1≤ expX < 25 일 때, high = Fraction_rcp_pi[215:215-23] 이다.
값 expAdder12_0 = expHigh + expX + 1 = expX-1 이다. Adder12_0 의 1의 위치는 71-(expX-1) 에 있다. expX ≥ 25 를 취급하기 위해, 73-expX ≤ 71 이라면, mantissaAdder12_0[71:73-expX] 를 0 으로 설정한다. 또한, 1의 위치 비트 mantissaAdder12_0[72-expX : 72-expX] 를 AdderAll의 부호를 통과시킨다. 그 후 1의 위치 비트 mantissaAdder12_0[72-expX:72-expX] 를 AdderAll 의 부호를 통과시킨다. 그 후, FinalSign = mantissaAdder12_0 [72-expX:72-expX] 이다. 부호 비트 정보를 AdderAll 으로 설정한 후, mantissaAdder12_0[71-expX:71-expX] 를 0 으로 설정한다. S34From12 = mantissaAdder12_0[71-expX:71-expX](1/2 의 위치) 이며, 이하를 얻는다 :
mantissaAdder12_0[71-expX:0] = mantissaAdder12_0[71-expX:0]^S34From12 + S34From12 (6)
Adder34 의 부호 비트로서 S34From12 를 추가로 출력한다. 식(6)은 2의 보수를 구비한 Adder12_0 부분에 대해 S34From12 = 1 일 동안
Figure 112017032594825-pat00006
를 프로세싱하고, Adder34 에 대한 부호는 변경하며, 이에 따라 뺄셈이 발생하게 한다.
이러한 변경을 한 후, 수정된 Adder12_0 을 리딩 0 및 라운딩 단계로 출력하여, 라운딩 후 새로운 expAdder12 및 mantissaAdder12 를 구비한 Adder12_1 을 48 비트 정밀도로 얻는다. Adder34_0 내지 Adder34_1 은 이전의 Dp4 프로세스와 동일하지만, 그러나 Adder34_1 의 부호 비트는 S34From12 로 변경될 수 있다.
expX = 0 일 때, 1/2 의 위치는 71 에 있다. S34From12 = Adder12_0[71:71] 및 수학 식(6) 또한 적용된다. Adder12_0 는 리딩 0 및 라운딩 단계를 통과하여, 라운딩 후 새로운 expAdder12 및 mantissaAdder12 를 구비한 Adder12 를 48 비트 정밀도로 얻는다.
Adder34_0 내지 Adder34_1 은 이전의 Dp4 프로세스와 동일하지만, 그러나 Adder34 의 부호 비트는 S34From12 로 변경될 수 있다.
expX < 0 , |x| < 1.0, |x|/π < 0.32 < 0.5 일 때, 1/2 의 비트는 항상 0 이다. Adder12_0 은 리딩 0 및 라운딩 단계를 통과하여, 라운딩 후 새로운 expAdder12 및 matissaAdder12 구비한 Adder12_1 을 48 비트 정밀도로 얻는다. Adder34_0 내지 Adder34_1 은 이전 Dp4 프로세스와 동일하다. 그러나 Mul4 의 LSB 24 비트를 잘라낼 수 있다.
리딩 제로 계산이 mantissaAdder12_0 의 71 비트를 갖는 것으로 보이더라도, 실제로, mantissaAdder12_0[½'s pos-1 : ½'s_pos-48]의 48 비트만 리딩 제로 계산에 놓는다. 모든 단일의 정밀도를 위해, mantissaAdder12_0[½'s pos] 후에 최대 32 개의 0 이 있다.
식(6)은 71 비트 소수점 가산기를 가질 수 있다(S34From12 = 1 이라면, NOT 을 수행한 후 +1). mantissaAdder12_0 = Fraction_rcp_pi[215:215-23]*manX = 0xa2f983_6e4e44*manX 이기 때문에, 약간 단순화 할 수 있다. 많아야 23+2 LSB 0 이 있으므로, LSB 26 비트에 대해 ~ MantissaAdder12_0[0,25]+1 을 계산할 필요만 있으며, 나머지 MSB 에 대해, ~ (NOT) 동작만 할 뿐이다. 이는 71 비트 2의 보수를 26 비트 2의 보수 및 45 비트 NOT 동작과 분리시킨다.
리딩 제로 계산 후, mantissaAdder12 를 48 비트 정밀도로만 유지한다. 48 비트 정밀도가 충분하다면, 뺄셈이 발생할 경우, Adder12 가 Adder34 로 일부 비트를 삭제할 수 있기 때문에(S34From12 = 1 경우), 문제가 있다. mantissaAdder34[47,47] 가 mantissaAdder12_0[23,23] 과 정렬되기 때문에, mantissaAdder12_0 리딩 제로가 23 또는 24 에 있을 때만 삭제가 발생한다. 두 경우 모두에 있어, Adder12 의 전체 정밀도를 가질 수 있으며, 또한 48 비트 가수를 유지시킨다.
mantissaAdder34 의 48 비트를 유지하는 것은 이론적으로 이를 증명할 수는 없더라도, 허용 가능하다(이론적으로는, mantissaAdder34 의 MSB 의 24 비트가 아마도 24 비트 정밀도만을 남기고 삭제될 수 있다). 그러나 모든 부동 소수점 값을 소비했기 때문에, mantissaAdder34 에서 삭제되는 최대 비트 수는 8 이다. 이는 Adder12_1 + Adder34_1 이후에 적어도 40 의 유효 비트를 유지한다는 것을 의미한다. 이는, AddAll 을 24 비트의 가수 정밀도로 얻기 위해, Adder12_0 및 Adder34_1 를 위해 32 비트 가수를 사용할 수 있다는 것을 의미한다.
이하의 예는 Cos(x) = Sin(x + 0.5π) = Sin(0.5π - x) 를 계산하기 위해 전술한 회로를 사용하는 것을 다루고 있다. 0.5π를 가산하는 것은 1/2 의 위치에서 Adder12_0 에 1 을 더하는 것과 같다. 물론, 1/2 의 위치를 알아야만 한다. 1/2 의 위치에 1을 가산하였다면, 다른 고정 소수점 가산기가 필요하다. 일부 실시예에서는 다음의 조건에 따라 S34From12, FinalSign 을 계산할 뿐이다

Adder_0[1's pos: 1/2's_pos], 2 비트값

FinalSign

S34From12

0

0

1

1

1

0

2

1

1

3

0

0
표 1. Cos(x)에 대한 FinalSign 및 S34From12
식(5)은, Cos(x)를 계산할 때, expX ≥ 25 에 대해서도 여전히 적용된다. 마찬가지로, 식(6)은 0 ≤ expX < 0 에 대해서도 적용된다. expX < 0, Cos(x) = Sin(0.5π - x) = SinPi(0.5 - x/π) 에 대해, 단지 Adder12 부호를 음으로 변경하고, Adder34 를 0.5 가 되도록 강제한다(expAdder34 = -1, mantissaAdder34 = 1 << 47). 그 후, AdderAll 에서 충분한 정밀도로 0.5 - x/π 를 갖는데, 그 이유는 adder12 에서 48 비트의 높은 정밀도를 갖기 때문이다.
이하의 예는 리딩 0 의 31 비트를 구비한 Sin(x)의 계산을 다루고 있다. 이 예는 X = 0x67098498; (S=0, expX=79, manX=0x898498) 및 Fraction_rcp_pi[215:0]={0xa2f983_6e4e44_1529fc_2757d1_f534dd_c0db62_95993c_439041_fe5148} 으로 가정한다.
단계(1)는 함수 Fraction_EffectBits[95:0] = (expX) ≥25 ? Fraction_rcp_pi[215-expX + 25:215-expX + 25-95]:Fraction_rcp_pi [215 : 215-95] 에 따라 96 비트 유효 분수를 선택하는 것이다. Fraction_rcp_pi[215:0] 의 79-25 비트를 시프트하고, 그 후 높은 96 비트를 얻었으므로, Fraction_EffectBits[95:0] = 4a7f09_d5f47d_4d3770_36d8a5 이다.
Fraction_EffectBits 를 54 비트로 시프트했기 때문에, Fraction_EffectBits 의 지수는 ExpOfFranction_EffectBits = -2-54이다(Fraction_rcp_pi의 초기 지수는 -2 이다).
단계(2)는 manX*Fraction_EffectBits[95:0] 을 계산하기 위해 DP4 엔진을 사용하는 것이다. 먼저, {high[23:0], mid[23:0], low1[23:0], low2[23:0]} = Fraction_EffectBits[95:0] 을 설정한다. 따라서 manX* Fraction_EffectBits[95:0] = manX*high + manX*mid + manX*low1 + manX*low2 = mul1 + mul2 + mul3 + mul4 를 갖는다.
단계(2)에 있어서, 모든 곱셈 결과는 48 비트의 가수를 유지하고, 아래와 같이 4개의 지수를 곱한다 :
exp_of_mul1 = 79+(-2-54) + 1 = 24; mul1 = 0x280491_8d1158;
exp_of_mul2 = exp_of_mul1-24; mul2 = 0x72eea7_fe9e38;
exp_of_mul3 = exp_of_mul1 -48; mul3 = 0x297aa9_5eaa80; 및
exp_of_mul4 = exp_of_mul1 -72; mul4 = 0x1d7658_92b5f8.
4개의 곱셈 결과는 표 2에 도시된 바와 같이 정렬되어야 한다.

48 비트 Man1

24'b

48 비트 man2

24'b

24'b

48 비트 man3

24'b

24'b

24'b

48 비트 man4
표 2. 곱셈 결과의 정렬
단계(3)에서는 Adder12_0 및 Adder34_0 을 별도로 계산하는 2개의 병렬 가산기를 사용한다. 이 단계에서는 Adder12 = mul0 + mul1 을 계산하는 72 비트 가산기를 사용한다. 일부 실시예에 있어서, 실제 72 비트 가산기는 실시되지 않는다. 대신에, Dp4 엔진은 48 비트 가산기만 가질 수 있다. 따라서 Adder12_0 은 Adder12_0[71:24]] = Mul1[47:0] + Mul2[47:24](정렬된 LSB) 로서 계산되고, Adder12_0[23:0] 은 Mul2[23:0] 과 동일하게 설정된다.
도시된 예에 있어서, 이는 Adder12_0[71:0] = 0x280491_FFFFFF_fe9e38 을 제공한다. 47 에서 1 의 위치 때문에, 비트를 47 내지 0 으로 설정하고, 또한 비트-47 을 최종 부호, 즉 FinalSign = 1, mantissaAdder12_0[71:0] = 0x000000_7FFFFF_FE9E38 로 이동시키는데, 그 이유는 mantissaAdder12_0[46:46] = 1, 즉 S34From12 = 1 이고, mantissaAdder12_0[46:0] = (mantissaAdder12_0[46:0]^0x7FFFFF_FFFFFF) + 1 = 0x000000_0161c8 이기 때문이다.
마지막으로, 리딩 0(31) 및 라운딩(이 경우에는 라운딩이 필요 없음)을 찾는 단계를 수행한다. 따라서 expAdder12 = -31, mantissaAdder12 = 0xB0E400000000 를 갖는다.
단계(3)는 Adder34_1 을 얻는 단계를 추가로 포함하며, 이는 수정되지 않은 Dp4 엔진에 따라 프로세싱을 수행하는 단계를 포함할 수 있다. 일부 실시예에 있어서, Adder34_0[47:0] 은 Mul3[47:0] + Mul4[47:24](LSB에서 정렬된) 와 동일하게 설정된다. Mul4[23:0] 은 간단히 무시된다.
이 예에서, 이는 리딩 0 = 2 을 구비한, Adder34_0[47:0] = 0x297AA9_7C20D8 을 제공한다. 따라서 Adder34_0 는 Adder34_1:expAdder34 = -24-2 = -26, mantissaAdder34 [47:0] = 0x A5EAA5_F08360, signAdder34 = S34From12 = 1 을 얻기 위해 정규화된다
단계(4)에 있어서, (Adder12 + Adder34) 를 FinalSign 으로 계산한다. expAdder34 = expAdder12 + 5 이기 때문에, mantissaAdder12 를 1/32 로 확장하고 추가 단계로 진행된다. Adder34 의 부호가 Adder12의 부호와 다르다고 간주하고,
mantissaAdderAll = |0xB0E400000000/32 - 0x A5EAA5_F08360| = 0xA06385_F08360,
expAdderAll = expAdder34 - leading0(mantissaAdderAll) = -26, 및
signAdder12 = signAdder34^FinalSign = 1^1 = 0 을 가졌다.
라운딩에 의해, 최종 출력 t = 0xA06386*2^ -26 *2^ - 23 을 갖는다.
hide 1 을 제거하였다면, 16 진수 표현식 Hex(t) = 0x32A06386 을 얻는다.
도 3은 예시적인 연산 디바이스(300)를 나타내는 블록도이다. 연산 디바이스(300)는 여기에 기재된 바와 같은 다양한 절차를 수행하는 데 사용될 수 있다. 연산 디바이스(300)는 서버, 클라이언트, 또는 임의의 다른 연산 개체로서 기능할 수 있다. 연산 디바이스는 여기에 기재된 방법을 수행하는 회로를 포함할 수 있고, 또한 여기에 기재된 방법을 호출하여 삼각 함수를 계산하는 응용 프로그램과 같은 하나 또는 그 이상의 응용 프로그램을 실행할 수 있다. 연산 디바이스(300)는 데스크탑 컴퓨터, 노트북 컴퓨터, 서버 컴퓨터, 손파지형 컴퓨터, 태블릿 컴퓨터 등과 같은 광범위한 연산 디바이스 중 임의의 것일 수 있다.
연산 디바이스(300)는 하나 또는 그 이상의 프로세서(들)(302), 하나 또는 그 이상의 메모리 디바이스(들)(304), 하나 또는 그 이상의 인터페이스(들)(306), 하나 또는 그 이상의 대용량 저장 디바이스(들)(308), 하나 또는 그 이상의 입력/출력(I/O) 디바이스(들)(310), 및 디스플레이 디바이스(330)를 포함할 수 있으며, 이 모두는 버스(312)에 연결된다. 상기 프로세서(들)(302)는, 메모리 디바이스(들)(304) 및/또는 대용량 저장 디바이스(들)(308)에 저장된 명령을 실행시키는 하나 또는 그 이상의 프로세서 또는 제어기를 포함할 수 있다. 프로세서(들)(302)는 캐시 메모리와 같은 다양한 타입의 컴퓨터-판독 가능한 매체를 포함할 수도 있다.
상기 메모리 디바이스(들)(304)는 휘발성 메모리[예를 들어, 랜덤 액세스 메모리(RAM)(314)] 및/또는 비 휘발성 메모리[예를 들어, 판독-전용 메모리(ROM)(316)]와 같은 다양한 컴퓨터-판독 가능한 매체를 포함한다. 상기 메모리 디바이스(들)(304)는 플래시 메모리와 같은 재기입 가능한 ROM 을 포함할 수도 있다.
상기 대용량 저장 장치(들)(308)는 자기 테이프, 자기 디스크, 광학 디스크, 고체-상태 메모리(예를 들어, 플래시 메모리), 등과 같은 다양한 컴퓨터 판독 가능한 매체를 포함한다. 도 3에 도시된 바와 같이, 특별한 대용량 저장 디바이스는 하드 디스크 드라이브(324)이다. 다양한 컴퓨터 판독 가능한 매체로부터의 판독 및/또는 이에 대한 기입이 가능하도록, 다양한 드라이브가 대용량 저장 디바이스(들)(308)에 포함될 수도 있다. 대용량 저장 디바이스(들)(308)는 제거 가능한 매체(326) 및/또는 제거 불가능한 매체를 포함한다.
I/O 디바이스(들)(310)는 데이터 및/또는 다른 정보가 연산 디바이스(300)에 입력되거나 또는 이로부터 검색되는 것을 허용하는 다양한 디바이스를 포함한다. 예시적인 I/O 디바이스(들)(310)는 커서 제어 장치, 키보드, 키패드, 마이크, 모니터 또는 다른 디스플레이 디바이스, 스피커, 프린터, 네트워크 인터페이스 카드, 모뎀, 렌즈, CCD 또는 다른 이미지 캡처 디바이스, 등을 포함한다.
디스플레이 디바이스(330)는 연산 디바이스(300)의 하나 또는 그 이상의 사용자에게 정보를 디스플레이 할 수 있는 임의의 타입의 디바이스를 포함한다. 디스플레이 디바이스(330)의 예로는 모니터, 디스플레이 터미널, 비디오 프로젝션 디바이스, 등을 포함한다.
그래픽 처리 유닛(GPU)(332)은 프로세서(들)(302) 및/또는 디스플레이 디바이스(330)에 결합될 수 있다. 상기 GPU 는 컴퓨터 발생된 이미지를 렌더링하고, 또한 다른 그래픽 처리를 수행하도록 작동될 수 있다. 상기 GPU 는 프로세서(들)(302)와 같은 범용 프로세서의 기능성의 일부 또는 전부를 포함할 수 있다. 상기 GPU 는 그래픽 처리에 특정한 추가적인 기능성을 포함할 수도 있다. 상기 GPU 는 좌표 변환, 음영(shading), 텍스처링(texturing), 래스터화(rasterization)와 관련된 하드 코딩형 및/또는 하드-와이어형 그래픽 기능, 및 컴퓨터 발생된 이미지의 렌더링에 유용한 다른 기능을 포함할 수 있다.
인터페이스(들)(306)는 연산 디바이스(300)가 다른 시스템, 디바이스, 또는 연산 환경과 호환하는 것을 허용하는 다양한 인터페이스를 포함한다. 예시적인 인터페이스(들)(306)는 근거리 통신망(LAN), 광역 통신망(WAN), 무선 네트워크, 및 인터넷으로의 인터페이스와 같은, 임의의 개수의 상이한 네트워크 인터페이스(320)를 포함한다. 다른 인터페이스(들)는 사용자 인터페이스(318) 및 주변 장치 인터페이스(322)를 포함한다. 상기 인터페이스(들)(306)는 하나 또는 그 이상의 사용자 인터페이스 요소(318)를 포함할 수도 있다. 상기 인터페이스(들)(306)는 프린터, 포인팅 디바이스(마우스, 트랙 패드, 등), 키보드, 등을 위한 인터페이스와 같은, 하나 또는 그 이상의 주변 인터페이스를 포함할 수 있다.
버스(312)는, 버스(312)에 결합된 다른 디바이스 또는 부품뿐만 아니라, 프로세서(들)(302), 메모리 디바이스(들)(304), 인터페이스(들)(306), 대용량 저장 디바이스(들)(308), 및 I/O 디바이스(들)(310)가 서로 통신하는 것을 허용한다. 버스(312)는 시스템 버스, PCI 버스, IEEE 1394 버스, USB 버스, 등과 같은 버스 구조물의 여러 타입 중 하나 또는 그 이상을 나타낸다.
예시의 목적으로, 프로그램 및 다른 실행 가능한 프로그램 성분이 여기에 개별적인 블록으로서 도시되어 있지만, 이러한 프로그램 및 성분은 연산 디바이스(300)의 상이한 저장 부품에 다양한 시간에 상주할 수 있고, 또한 프로세서(302)에 의해 실행되는 것을 인식해야 한다. 대안적으로, 여기에 기재된 시스템 및 절차는 하드웨어, 또는 하드웨어와 소프트웨어 및/또는 펌웨어의 조합으로 실시될 수 있다. 예를 들어, 여기에 기재된 하나 또는 그 이상의 시스템 및 절차를 실행하기 위해, 하나 또는 그 이상의 주문형 집적 회로(ASIC)가 프로그램될 수 있다.
본 발명은 그 정신 또는 본질적 특성으로부터의 일탈 없이 다른 특정한 형태로 실시될 수 있다. 기재된 실시예는 모든 양태에 있어서 단지 예시적으로만 고려되며, 제한적인 것이 아니다. 따라서 본 발명의 범위는 전술한 기재보다는 첨부된 청구범위에 의해 표시된다. 청구범위의 균등물의 의미 및 범주 내에 속하는 모든 변경은 그 범위 내에 포함되어야 한다.
104: 리딩 0 및 라운딩 스테이지 106: 최종 가산기 스테이지
108: 인수 스테이지 110: 시프팅 스테이지
112: 조정/부호 스테이지 114: 최종 부호 스테이지
302: 프로세서 304: 메모리 디바이스
306: 인터페이스 308: 대용량 저장 디바이스
310: 입력/출력 디바이스 314: RAM
316: ROM 318: 사용자 인터페이스
320: 네트웍 인터페이스 322: 주변 장치 인터페이스
324: 하드 디스크 드라이브 330: 디스플레이 디바이스
332: GPU

Claims (11)

  1. 시스템으로서:
    (a) 4개의 제1 입력값(v1, v2, v3, v4) 및 4개의 제2 입력값(u1, u2, u3, u4)을 수신하도록,
    (b) 4개의 제1 입력값 및 4개의 제2 입력값을 4개의 승산기(Mul1, Mul2, Mul3 및 Mul4)에 입력하도록,
    (c) 승산기(Mul1, Mul2)의 출력값을 가산기(Adder12)에 입력하도록,
    (d) 승산기(Mul3, Mul4)의 출력값을 가산기(Adder34)에 입력하도록,
    (e) Adder12 및 Adder34 의 출력값을 가산기(AdderAll) 내로 입력하도록,
    (f) AdderAll의 출력값을 출력하도록,
    구성된 4개의 요소 내적 회로(Dp4);
    1/pi 및 x 의 표시값을 승산기(Mul1, Mul2, Mul3, Mul4)에 입력함으로써, x/pi 의 추정값을 계산하도록,
    삼각 함수 회로에 대응하는 삼각 함수를 위한 이론적으로 정확한 값에 대해 t 를 입력 인수로서 수신하고, 또한 입력 인수로서 Mul1 + Mul2 + Mul3 + Mul4 를 위해 삼각 함수 회로의 출력값과 비교되었을 때 x/pi 를 입력값으로서 취하는 삼각 함수 회로의 출력값의 정확도를 증가시키는 데 효과적인 t 를 연산하기 위해, 가산기(Adder12, Adder34, AdderAll)를 이용하여 승산기(Mul1, Mul2, Mul3, Mul4)의 출력값을 프로세스하도록,
    구성된 삼각 함수 회로를 포함하는, 시스템.
  2. 청구항 1에 있어서,
    상기 삼각 함수 회로는, 근사값에 효과적인 t 를 계산하는 데 효과적인 가산기(Adder12, Adder34, AdderAll)를 이용하여, 승산기(Mul1, Mul2, Mul3, Mul4)의 출력값을 프로세스하도록 더 구성되는, 시스템.
    Figure 112017032594825-pat00007

  3. 청구항 2에 있어서,
    상기 삼각 함수 회로는, Fraction_RCP_PI 내의 Fraction_EffectBits의 중요도가 expX 의 크기에 따라 감소하도록, x(expX)의 지수 부분의 크기에 따라 1/pi(Fraction_RCP_PI)의 2진법 표시값의 일부(Fraction_EffectBits)를 선택함으로써, x/pi 의 추정값을 계산하도록 더 구성되는, 시스템.
  4. 청구항 3에 있어서,
    Fraction_RCP_PI 는 216 비트를 가지며;
    상기 삼각 함수 회로는,
    expX 가 25 이상이라면, Fraction_EffectBits = Fraction_RCP_PI[215:215-95] 로 함으로써, 및
    expX가 25 미만이라면, Fraction_EffectBits = Fraction_RCP_PI[215-expX + 25:215-expX + 25-95] 로 함으로써,
    Fraction_EffectBits 를 선택하도록 더 구성되는, 시스템.
  5. 청구항 4에 있어서,
    상기 삼각 함수 회로는,
    Fraction_RCP_PI 를 4개의 부분, 즉 High, Mid, Low1, 및 Low2 로 세분함으로써,
    x(manX)의 가수를, Mul1 의 High 와 곱함으로써,
    manX 를, Mul2 의 Mid 와 곱함으로써,
    manX 를, Mul3 의 Low1 와 곱함으로써, 및
    manX 를 Mul4 의 Low2 와 곱함으로써,
    x/pi 의 추정값을 계산하도록 더 구성되는, 시스템.
  6. 청구항 5에 있어서,
    상기 삼각 함수 회로는,
    ExpOfFraction_EffectBits = (expX >= 25) ? 2 + 25 - expX:2 를 정의함으로써,
    manX 를, Exp0fFraction_EffectBits 와 동일한 High 의 지수(expHigh)를 구비한 Mul1 의 High 와 곱함으로써,
    manX 를, expHigh-24 와 동일한 Mid 의 지수(expMid)를 구비한 Mul2 의 Mid 와 곱함으로써,
    manX 를, expHigh-48 과 동일한 Low1 의 지수(expLow1)를 구비한 Mul3 의 Low1 과 곱함으로써, 및
    manX 를, expHigh-72 와 동일한 Low2의 지수(expLow2)를 구비한 Mul4의 Low2 와 곱함으로써,
    x/pi 의 추정값을 계산하도록 더 구성되는, 시스템.
  7. 청구항 1에 있어서,
    상기 삼각 함수 회로는,
    expX 가 0 미만 이라면, 값(FinalSign)을 0 과 동일하게 설정하여, AdderAll 의 출력값의 부호가 삼각 함수 회로에 의해 변경되지 않도록 함으로써,
    t 를 계산하는 데 효과적인 가산기(Adder12, Adder34, AdderAll)를 이용하여, 승산기(Mul1, Mul2, Mul3, Mul4)의 출력값을 프로세스하도록 구성되는, 시스템.
  8. 청구항 7에 있어서,
    상기 삼각 함수 회로는 적어도 하나의 연산 코드를 수신하고, 상기 연산 코드가 Sine 을 표시하면 값(isSign)을 1 과 동일하게 설정하고, 상기 연산 코드가 Cosine 을 표시하면 값(isCos)을 1 과 동일하게 설정하도록 구성되며;
    상기 삼각 함수 회로는
    expX 가 25 보다 크면, expX' 를 25 와 동일하게 설정함으로써,
    expX 가 25 이하라면, expX' 를 expX 와 동일하게 설정함으로써,
    Mul1 의 출력값 및 Mul2 의 출력값의 비트 47-24 를, Adder12 내로 입력함으로써,
    72 비트(비트[71:0])를 포함하는 값(Adder12_0)을, Mul2의 출력값의 비트 23-0 과 연쇄된 Adder12의 출력값과 동일하게 설정함으로써,
    첫째로, expX' 가 2 이상이라면, Bit[71:73-expX'] = 0 을 설정함으로써,
    둘째로, expX' 가 1 이상이라면, (a) Bit[72-ExpX'] = isSin? Bit[72-ExpX']:Bit[72-ExpX']^Bit[71-ExpX'] 를 설정하고, 그 후 (b) FinalSign 을 Bit[72-ExpX']와 동일하게 설정하며, 그 후 (c) Bit[72-ExpX'] = 0 을 설정함으로써,
    셋째로, expX' 가 1 미만이고 또한 0 보다 작지 않다면, FinalSign = isSin? 0:BIT[71] 을 설정함으로써,
    네째로, expX' 가 0 보다 작지 않다면, Bit[71-ExpX'] = Bit[71-ExpX']^isCos 를 설정함으로써,
    Adder12_0 을 프로세스함으로써,
    t 를 계산하는 데 효과적인 가산기(Adder12, Adder34, AdderAll)를 이용하여, 상기 승산기(Mul1, Mul2, Mul3, Mul4)의 출력값을 프로세스하도록 구성되는, 시스템.
  9. 청구항 8에 있어서,
    상기 삼각 함수 회로는,
    expX' 가 0 미만이라면, (a) FinalSign 을 0 과 동일하게 설정하고, (b) S34From12 를 0 과 동일하게 설정하고, (c) Adder12_0 에 대해 리딩 0 및 라운딩을 수행함으로써 Adder12_1 을 계산하고, (d) Adder12_1 = isSin ? Adder12_1:- Adder12_1 을 설정함으로써,
    expX '가 0 보다 작지 않고, 또한 Bit[71-ExpX'] 가 1 과 동일하다면, (a) S34From12 를 Bit[71-ExpX'] 와 동일하게 설정하고, (b) Bit[71-ExpX':0] 을 Bit[71-ExpX':0] 의 2개의 인사말과 동일하게 설정함으로써,
    expX '가 0 보다 작지 않다면, Adder12_0 에 대해 리딩 0 및 라운딩을 수행하여 Adder12_1 을 계산함으로써,
    t 를 계산하는 데 효과적인 가산기(Adder12, Adder34, AdderAll)를 이용하여 승산기(Mul1, Mul2, Mul3, Mul4)의 출력값을 프로세스하도록 구성되는, 시스템.
  10. 청구항 9에 있어서,
    상기 삼각 함수 회로는,
    Mul3 의 출력값 및 Mul4 의 출력값의 비트 47-24 를 Adder34 내로 입력함으로써,
    48 비트를 포함하는 값(Adder34_0)을, Mul4 의 출력값의 비트 23-0 과 연쇄된 Adder34 의 출력값과 동일하게 설정함으로써,
    Adder34_0 에 대해 리딩 0 및 라운딩을 수행함으로써 Adder34_1 을 계산함으로써,
    S34From12 가 1 로 설정되었다면, Adder34_1 의 부호를 변경함으로써, 및
    Adder34_1 을, (expX' < 0 && isCos) ? 0.5:Adder34_0 와 동일하게 설정함으로써,
    t 를 계산하는 데 효과적인 가산기(Adder12, Adder34, AdderAll)를 이용하여 승산기(Mul1, Mul2, Mul3, Mul4)의 출력값을 프로세스하도록 구성되는, 시스템.
  11. 청구항 10에 있어서,
    상기 삼각 함수 회로는,
    Adder12_1 과 Adder34_1 의 총합으로서 AdderAll 을 이용하여 AdderAll_0 을 계산함으로써,
    FinalSign 이 1 과 동일하다면, AdderAll_0 의 부호를 변경함으로써,
    AdderAll_0 을 t 로서 출력함으로써,
    t > = 0 이라면, t = t/2128 을 설정함으로써,
    t 를, SinPi(t) 와 CosPi(t) 중 적어도 하나를 근사화하도록 구성된 삼각 함수 회로에 입력함으로써,
    t 를 계산하는 데 효과적인 가산기(Adder12, Adder34, AdderAll)를 이용하여 승산기(Mul1, Mul2, Mul3, Mul4)의 출력값을 프로세스하도록 구성되는, 시스템.
KR1020170043158A 2016-04-28 2017-04-03 4개의 입력 내적 회로를 사용하는 삼각 함수 계산 KR102281047B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/141,625 US9875084B2 (en) 2016-04-28 2016-04-28 Calculating trigonometric functions using a four input dot product circuit
US15/141,625 2016-04-28

Publications (2)

Publication Number Publication Date
KR20170123230A KR20170123230A (ko) 2017-11-07
KR102281047B1 true KR102281047B1 (ko) 2021-07-22

Family

ID=58644925

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020170043158A KR102281047B1 (ko) 2016-04-28 2017-04-03 4개의 입력 내적 회로를 사용하는 삼각 함수 계산

Country Status (5)

Country Link
US (1) US9875084B2 (ko)
EP (1) EP3239833B1 (ko)
JP (1) JP6923350B2 (ko)
KR (1) KR102281047B1 (ko)
CN (1) CN108182050B (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10921122B2 (en) * 2018-02-06 2021-02-16 Stmicroelectronics S.R.L. Tilt event detection device, system and method

Family Cites Families (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3688098A (en) 1971-01-21 1972-08-29 Singer General Precision Sine-cosine function generator using a power series
EP0218724A1 (en) 1985-04-22 1987-04-22 AT&T Corp. Fast sine and cosine generating apparatus
US4777613A (en) 1986-04-01 1988-10-11 Motorola Inc. Floating point numeric data processor
EP0259514A1 (de) 1986-09-11 1988-03-16 Deutsche ITT Industries GmbH Digitalschaltung zur gleichzeitigen Erzeugung von digitalen Sinus- und Cosinusfunktionswerten
JPH0766372B2 (ja) 1986-11-26 1995-07-19 株式会社日立製作所 浮動小数点演算処理装置
JPH0776916B2 (ja) 1987-06-30 1995-08-16 日本電気株式会社 疑似除算方式を用いた三角関数演算装置
US5276633A (en) 1992-08-14 1994-01-04 Harris Corporation Sine/cosine generator and method
EP0622727A1 (en) 1993-04-29 1994-11-02 International Business Machines Corporation System for optimizing argument reduction
JPH086766A (ja) * 1994-06-23 1996-01-12 Matsushita Electric Ind Co Ltd 正弦余弦演算装置
US5953241A (en) * 1995-08-16 1999-09-14 Microunity Engeering Systems, Inc. Multiplier array processing system with enhanced utilization at lower precision for group multiply and sum instruction
JP3790307B2 (ja) 1996-10-16 2006-06-28 株式会社ルネサステクノロジ データプロセッサ及びデータ処理システム
US5963460A (en) 1996-12-17 1999-10-05 Metaflow Technologies, Inc. Apparatus for computing transcendental functions quickly
US6055553A (en) 1997-02-25 2000-04-25 Kantabutra; Vitit Apparatus for computing exponential and trigonometric functions
US5774082A (en) 1997-03-13 1998-06-30 Raytheon Company Digital phase to digital sine and cosine amplitude translator
US6021423A (en) * 1997-09-26 2000-02-01 Xilinx, Inc. Method for parallel-efficient configuring an FPGA for large FFTS and other vector rotation computations
US6141670A (en) 1997-09-30 2000-10-31 Intel Corporation Apparatus and method useful for evaluating periodic functions
US6640237B1 (en) 1999-07-27 2003-10-28 Raytheon Company Method and system for generating a trigonometric function
WO2002021323A2 (en) 2000-09-08 2002-03-14 Avaz Networks Hardware function generator support in a dsp
CA2327924A1 (en) * 2000-12-08 2002-06-08 Ibm Canada Limited-Ibm Canada Limitee Processor design for extended-precision arithmetic
US7003536B2 (en) * 2002-08-15 2006-02-21 Comsys Communications & Signal Processing Ltd. Reduced complexity fast hadamard transform
US20050203980A1 (en) 2004-03-11 2005-09-15 Harrison John R. Computing transcendental functions using single instruction multiple data (SIMD) operations
JP4891252B2 (ja) * 2004-11-10 2012-03-07 エヌヴィディア コーポレイション 汎用乗算加算機能ユニット
US7912887B2 (en) * 2006-05-10 2011-03-22 Qualcomm Incorporated Mode-based multiply-add recoding for denormal operands
US9703530B2 (en) * 2006-07-25 2017-07-11 Vivante Corporation Systems and methods for computing mathematical functions
US20080071851A1 (en) * 2006-09-20 2008-03-20 Ronen Zohar Instruction and logic for performing a dot-product operation
US8090756B2 (en) 2007-01-29 2012-01-03 International Business Machines Corporation Method and apparatus for generating trigonometric results
US8838663B2 (en) * 2007-03-30 2014-09-16 Intel Corporation Method and apparatus for performing multiplicative functions
US8200728B2 (en) 2008-05-29 2012-06-12 Harris Corporation Sine/cosine generator
US8166091B2 (en) * 2008-11-10 2012-04-24 Crossfield Technology LLC Floating-point fused dot-product unit
US8601044B2 (en) * 2010-03-02 2013-12-03 Altera Corporation Discrete Fourier Transform in an integrated circuit device
US8589463B2 (en) 2010-06-25 2013-11-19 Altera Corporation Calculation of trigonometric functions in an integrated circuit device
US9563402B2 (en) 2011-09-01 2017-02-07 Advanced Micro Devices, Inc. Method and apparatus for additive range reduction
CN103150137A (zh) 2013-03-01 2013-06-12 北京理工大学 一种覆盖全圆周角度的单精度浮点三角函数的实现方法
US8626813B1 (en) * 2013-08-12 2014-01-07 Board Of Regents, The University Of Texas System Dual-path fused floating-point two-term dot product unit

Also Published As

Publication number Publication date
US9875084B2 (en) 2018-01-23
EP3239833B1 (en) 2019-03-13
KR20170123230A (ko) 2017-11-07
JP6923350B2 (ja) 2021-08-18
US20170315780A1 (en) 2017-11-02
CN108182050B (zh) 2023-08-18
JP2017199370A (ja) 2017-11-02
CN108182050A (zh) 2018-06-19
EP3239833A1 (en) 2017-11-01

Similar Documents

Publication Publication Date Title
JP6360450B2 (ja) 浮動小数点オペランドを乗算するためのデータ処理装置及び方法
GB2586559A (en) Enhanced low precision binary floating-point formatting
US20210182026A1 (en) Compressing like-magnitude partial products in multiply accumulation
GB2600358A (en) Processor and system to manipulate floating point and integer values in computations
CN112506935A (zh) 数据处理方法、装置、电子设备、存储介质及程序产品
US9600236B2 (en) Systems and methods for computing mathematical functions
KR102281047B1 (ko) 4개의 입력 내적 회로를 사용하는 삼각 함수 계산
US11237909B2 (en) Load exploitation and improved pipelineability of hardware instructions
JP6770777B2 (ja) 数学的関数を計算するためのシステム及び方法
KR102559930B1 (ko) 수학적 함수들을 연산하기 위한 시스템 및 방법들
US10230376B2 (en) Apparatus and method for performing division
CN115827555B (zh) 数据处理方法、计算机设备、存储介质和乘法器结构
US9703530B2 (en) Systems and methods for computing mathematical functions
EP3923132B1 (en) Device for performing multiply/accumulate operations
US11314482B2 (en) Low latency floating-point division operations
US20140181169A1 (en) Method, apparatus, system for single-path floating-point rounding flow that supports generation of normals/denormals and associated status flags
Park et al. Effective fixed-point pipelined divider for mobile rendering processors
KR20200002670A (ko) 두 개의 얇은 삼각형들을 이용하여 라인 세그먼트를 표현하는 시스템 및 방법

Legal Events

Date Code Title Description
E701 Decision to grant or registration of patent right
GRNT Written decision to grant