저는 Fixedpoint 클래스를 작성하고 있지만 약간의 문제가 있습니다 ... 곱셈, 나누기 부분, 에뮬레이션 방법을 잘 모르겠습니다. 부서 운영자에게 아주 힘든 찌르다가 잘못했다고 확신합니다. 지금까지 보이는 모습은 다음과 같습니다.C++ : 에뮬레이션 된 고정 소수점 나누기/곱셈
class Fixed
{
Fixed(short int _value, short int _part) :
value(long(_value + (_part >> 8))), part(long(_part & 0x0000FFFF)) {};
...
inline Fixed operator -() const // example of some of the bitwise it's doing
{
return Fixed(-value - 1, (~part)&0x0000FFFF);
};
...
inline Fixed operator/(const Fixed & arg) const // example of how I'm probably doing it wrong
{
long int tempInt = value<<8 | part;
long int tempPart = tempInt;
tempInt /= arg.value<<8 | arg.part;
tempPart %= arg.value<<8 | arg.part;
return Fixed(tempInt, tempPart);
};
long int value, part; // members
};
나는 아주 좋은 프로그래머가 아닙니다. 하하!
클래스의 'part'는 16 비트 너비이지만 (고정 오버플로가 발생하기 전에 가능한 오버플로 공간이 필요하다고 생각하기 때문에 긴 32 비트로 표현됩니다) 동일한 '정수'값 부품. 'part'가 연산 중 하나에서 0xFFFF를 넘으면 최상위 16 비트가 'value'에 추가 된 다음 부분이 마스크되어 최하위 16 비트 만 남습니다. 그것은 init 목록에서 수행됩니다.
내가 묻는 것이 싫지만 누구나 내가 이런 식으로 문서를 찾을 수있는 곳을 알거나 "트릭"또는이 두 연산자를 수행하는 방법을 알고 있다면 나는 그것을 매우 기쁘게 생각한다. 나는 수학에 관한 한 어리 석다. 나는 누군가가 이것을해야만한다는 것을 알고있다. 그러나 검색 구글은 한번 약속의 땅으로 나를 데려가 지 않는다. ...
이 숙제가 있습니까? 근본적으로 부동 소수점 수학을 모방하려하지만 부동 소수점 표기법을 사용하지 않고 있습니까? IEEE가 이것을 어떻게 처리하는지 보셨습니까? –
@Zac 슬프게도, 프로그래밍 학교에 다녀 본 적이 없거나 아무 것도 말할 수 없었습니다! 이것은 내가하고있는 2 차원 물리 엔진에서 부동 소수점 연산을 피하려는 아주 가난한 시도입니다. 하지만 지금은 IEEE 인터넷 검색, 그래서 내가 볼게요! –
@Zac : OP는 '고정 된'포인트 멀티 및 분할에 관한 것이지 '부동'지점이 아니라는 점에서 차이가 있습니다. http://en.wikipedia.org/wiki/Fixed-point_arithmetic –