GnuSmalltalkUsersGuide:BaseChapter 119
- Number
Number
네임스페이스 Smalltalk에 정의됨
슈퍼클래스: Magnitude
범주: 언어-데이터 타입
- 나는 부동 소수점과 정수를 포함해 숫자에 대한 연산을 제공하는 추상 클래스이다. 나는 일반 서술어를 제공하고, 2항 연산에 대한 함축적 타입 강제 변환 코드를 제공한다.
Number 클래스: 변환하기
coerce: aNumber
aNumber 를 응답하라 - 그것이 속한 클래스가 무엇이든 괜찮다.
readFrom: aStream
수신자의 인스턴스로 변환된 aStream의 나머지 부분에서 읽어온 숫자를 응답하라. 수신자가 숫자인 경우 결과의 클래스는 정의되지 않는다 - 하지만 결과는 괜찮다.
readFrom: aStream radix: anInteger
수신자의 인스턴스로 변환된 aStream의 나머지 부분에서 읽어온 숫자를 응답하라. 수신자가 숫자인 경우 결과의 클래스는 정의되지 않는다 - 하지만 결과는 괜찮다.
Number 클래스: 검사하기
isImmediate
x가 수신자의 인스턴스인 경우 x copy == x인지 응답하라.
Number: 산술
* aNumber
수신자의 aNumber를 제하여 결과를 응답하라.
+ aNumber
수신자와 aNumber를 합하여 결과를 응답하라.
- aNumber
수신자로부터 aNumber를 제하여 결과를 응답하라.
/ aNumber
수신자를 aNumber로 나누어 결과를 응답하라 (정밀도 손실되지 않음). aNumber가 0인 경우 유효한 (어쩌면 무한의) 연속값을 리턴하거나 ZeroDivide를 발생시켜라.
// aNumber
음의 무한에서 자름(truncation)을 이용해 수신자를 aNumber로 나눈 정수 몫을 리턴하라. aNumber가 0인 경우 ZeroDivide 예외를 발생시켜라.
\\ aNumber
음의 무한에서 자름(truncation)을 이용해 수신자를 aNumber로 나눈 나머지를 리턴하라. aNumber가 0인 경우 ZeroDivide 예외를 발생시켜라.
quo: aNumber
0에서 자름(truncation)을 이용해 수신자를 aNumber로 나눈 정수 몫을 리턴하라. aNumber가 0인 경우 ZeroDivide 예외를 발생시켜라.
reciprocal
수신자의 reciprocal을 리턴하라.
rem: aNumber
0에서 자름(truncation)을 이용해 수신자를 aNumber로 나눈 나머지를 리턴하라. aNumber가 0인 경우 ZeroDivide 예외를 발생시켜라.
Number: 강제 유형 변환
asCNumber
수신자를 C call-out 메커니즘이 이해하는 유형의 숫자로 변환하라.
Number: 비교하기
max: aNumber
수신자와 aNumber 간 최대값을 응답하라. self 또는 aNumber가 NaN인 경우 항상 그 값을 응답하도록 확보하는 데 필요하다면 서브클래스에서 재정의하라.
min: aNumber
수신자와 aNumber 간 최소값을 응답하라. self 또는 aNumber가 NaN인 경우 항상 그 값을 응답하도록 확보하는 데 필요하다면 서브클래스에서 재정의하라.
Number: 변환하기
asFloat
수신자를 Float의 임의 서브클래스로 변환하라.
asFloatD
해당 메서드의 기능은 Number의 서브클래스에 의해 구현되어야 한다.
asFloatE
해당 메서드의 기능은 Number의 서브클래스에 의해 구현되어야 한다.
asFloatQ
해당 메서드의 기능은 Number의 서브클래스에 의해 구현되어야 한다.
asNumber
수신자가 이미 숫자이므로 그대로 응답하라.
asRectangle
origin이 (self asPoint)인 빈 rectangle을 응답하라.
asScaledDecimal: n
ScaledDecimal 객체로 변환된 수신자를 응답하라.
asScaledDecimal: denDigits radix: base scale: n
base^denDigits로 나누고 ScaledDecimal 객체로 변환된 수신자를 응답하라.
coerce: aNumber
정수 또는 부동 소수점 수로 변환된 aNumber를 응답하라.
degreesToRadians
수신자를 radians로 변환하라.
generality
수신자의 범용성(generality)를 응답하라.
radiansToDegrees
수신자를 radians에서 degrees로 변환하라.
unity
1을 수신자의 클래스로 강제 유형 변환(coerce)하라. 기본 구현도 효과가 있지만 충분하지 않다.
zero
0을 수신자의 클래스로 강제 유형 변환(coerce)하라. 기본 구현도 효과가 있지만 충분하지 않다.
Number: 복사하기
deepCopy
수신자를 리턴하라 - 직접 객체(immediate object)이다(변경 불가).
shallowCopy
수신자를 리턴하라 - 직접 객체(immediate object)이다(변경 불가).
Number: 오류 발생시키기
arithmeticError: msg
msg를 메시지 텍스트로서 갖고 있는 ArithmeticError 예외를 발생시켜라.
zeroDivide
피제수(dividend)가 수신자에 해당하는 dividion-by-zero(ZeroDivide) 예외를 발생시켜라.
Number: 다양한 수학
abs
수신자의 절대값을 응답하라.
arcCos
수신자의 아크코사인을 응답하라.
arcCosh
수신자의 쌍곡선 아크코사인을 응답하라.
arcSin
수신자의 아크사인을 응답하라.
arcSinh
수신자의 쌍곡선 아크사인을 응답하라.
arcTan
수신자의 아크탄젠트를 응답하라.
arcTan: x
(0, 0)부터 시작해 (1, 0)로 이동하면서 - 예: 3시 - (x, self)과 ray의 각도(시계 반대방향으로 측정)를 응답하라.
arcTanh
수신자의 쌍곡선 아크탄젠트를 응답하라.
ceilingLog: radix
(self log: radix) 상한값(ceiling)을 응답하라. 정수를 응답하기에 최적화되었다.
cos
수신자의 코사인을 응답하라.
cosh
수신자의 쌍곡선 코사인을 응답하라.
estimatedLog
(self abs floorLog: 10)의 추정값(estimate)을 응답하라. 해당 메서드는 서브클래스에 의해 오버라이드되어야 하지만 Number의 구현은 오류를 발생시키지 않는다 - 단순히 올바른 결과를 제공하므로 속도가 느리다.
exp
e에 수신자를 거듭제곱한 값을 응답하라.
floorLog: radix
(self log: radix) 하한값(floor)을 응답하라. 정수를 응답하기에 최적화되었다.
ln
수신자의 로그 밑(log base) e를 응답하라.
log
수신자의 로그 밑(log base) 10을 응답하라.
log: aNumber
수시자의 로그 밑(log base) aNumber를 응답하라.
negated
수신자의 negated를 응답하라.
positiveDifference: aNumber
수신자와 aNumber의 양의 차이, 즉 self를 응답하라 - 양수일 경우 aNumber, 그 외의 경우 0.
raisedTo: aNumber
self의 aNumber 거듭제곱값을 리턴하라.
raisedToInteger: anInteger
self의 anInteger 거듭제곱값을 리턴하라.
sin
수신자의 사인을 응답하라.
sinh
수신자의 쌍곡선 사인을 응답하라.
sqrt
수신자의 제곱근을 응답하라.
squared
수신자의 제곱값을 응답하라.
tan
수신자의 탄젠트를 응답하라.
tanh
수신자의 쌍곡선 탄젠트를 응답하라.
withSignOf: aNumber
부호가 aNumber의 부호에 일치하도록 변경되었을지도 모르는 수신자를 응답하라.
Number: 포인트 생성
@ y
x가 수신자이고 y가 y인 새 포인트를 응답하라.
asPoint
새 포인트, self @ self를 응답하라.
Number: 재시도하기
retry: aSymbol coercing: aNumber
가장 낮은 수를 가진 aNumber와 수신자 사이에서 한 숫자를 다른 숫자의 클래스로 강제 유형 변환(coerce)하고 aSymbol의 호출을 재시도하라. aSymbol은 #= 또는 #~=(aNumber가 Number가 아닐 경우 실패할 것이기 때문에)가 아니어야 한다.
retryDifferenceCoercing: aNumber
가장 낮은 수를 가진 aNumber와 수신자 사이에서 한 숫자를 다른 숫자의 클래스로 강제 유형 변환(coerce)하고 #-의 호출을 재시도하라.
retryDivisionCoercing: aNumber
가장 낮은 수를 가진 aNumber와 수신자 사이에서 한 숫자를 다른 숫자의 클래스로 강제 유형 변환(coerce)하고 #/의 호출을 재시도하라.
retryEqualityCoercing: aNumber
가장 낮은 수를 가진 aNumber와 수신자 사이에서 한 숫자를 다른 숫자의 클래스로 강제 유형 변환(coerce)하고 #=의 호출을 재시도하라.
retryError
오류를 발생시켜라-같은 범용성을 가진 두 개의 인자로 호출된 재시도 메서드.
retryInequalityCoercing: aNumber
가장 낮은 수를 가진 aNumber와 수신자 사이에서 한 숫자를 다른 숫자의 클래스로 강제 유형 변환(coerce)하고 #~=의 호출을 재시도하라.
retryMultiplicationCoercing: aNumber
가장 낮은 수를 가진 aNumber와 수신자 사이에서 한 숫자를 다른 숫자의 클래스로 강제 유형 변환(coerce)하고 #*의 호출을 재시도하라.
retryRelationalOp: aSymbol coercing: aNumber
가장 낮은 수를 가진 aNumber와 수신자 사이에서 한 숫자를 다른 숫자의 클래스로 강제 유형 변환(coerce)하고 aSymbol (<, <=, >, >=)의 호출을 재시도하라.
retrySumCoercing: aNumber
가장 낮은 수를 가진 aNumber와 수신자 사이에서 한 숫자를 다른 숫자의 클래스로 강제 유형 변환(coerce)하고 #+의 호출을 재시도하라.
Number: 단축키와 반복자
to: stop
수신자에서 stop까지 1씩 가는 간격을 리턴하라.
to: stop by: step
수신자에서 stop까지 주어진 단계씩 가는 간격을 리턴하라.
to: stop by: step collect: aBlock
수신자에서 stop까지 주어진 단계씩 가는 간격에서 각 값에 대한 aBlock을 평가하라. 결과는 Array에서 수집되어 리턴된다.
to: stop by: step do: aBlock
수신자에서 stop까지 주어진 단계씩 가는 간격에서 각 값에 대한 aBlock을 평가하라. 정수 리터럴 단계에 대해, 그리고 임시변수(temporaries) 없이 1-인자 aBlocks에 대해 인자인으로 컴파일되므로 오버라이드가 불가능하다.
to: stop collect: aBlock
수신자에서 stop까지 1씩 가는 간격에서 각 값에 대한 aBlock을 평가하라. 결과는 Array에서 수집되어 리턴된다.
to: stop do: aBlock
수신자에서 stop까지 1씩 가는 간격에서 각 값에 대한 aBlock을 평가하라. 결과는 Array에서 수집되어 리턴된다. 임시변수(temporaries) 없이 1인자 aBlocks에 대해 in-line으로 컴파일되므로 오버라이드가 불가능하다.
Number: 검사하기
closeTo: num
수신자가 num와 충분히 가까운 것으로 간주할 수 있는지 응답하라 (number이 숫자가 아닌 경우 동등성 검사를 통해, num이 숫자인 경우 0.01% tolerance로 검사함으로써 가능).
even
self를 2로 나눌 수 있는 경우 true를 응답한다.
isFinite
수신자가 유한의 양을 나타내는지 응답하라. 대부분의 수치형 클래스는 유한의 양을 나타내므로 기본적으로는 #subclassRespondibility를 호출하는 대신 true를 응답한다.
isInfinite
수신자가 무한의 양을 나타내는지 응답하라. 대부분의 수치형 클래스는 유한의 양을 나타내므로 기본적으로는 #subclassRespondibility를 호출하는 대신 false를 응답한다.
isNaN
수신자가 Not-A-Number인지 응답하라. 대부분 수치형 클래스는 nans를 처리하지 않으므로 기본적으로는 #subclassResponsibility를 호출하는 대신 false를 응답한다.
isNumber
항상 'true'를 응답하라.
isRational
수신자가 유리수(rational)인지 응답하라 - 기본적으로는 false.
negative
수신자가 <0인지 응답하라.
odd
self를 2로 나눌 수 없는 경우 true를 리턴한다.
positive
수신자가 >=0인지 응답하라.
sign
수신자의 부호를 리턴한다.
strictlyPositive
수신자가 >0인지 응답하라.
Number: 절단과 반내림(round off)
asInteger
가장 가까운 정수로 반내림한 수신자를 응답하라.
floor
음의 무한대를 향해 수신자와 가장 가까운 정수를 리턴하라.
fractionPart
수신자 자체를 주는 수신자의 #integerPart로 합해진 숫자를 응답하라.
integerPart
0을 향해 절단된 수신자를 응답하라.
roundTo: aNumber
aNumber의 가장 가까운 배수로 절단된 수신자를 응답하라.
rounded
수신자에 가장 가까운 정수를 리턴한다.
truncateTo: aNumber
0을 향해 절단된 수신자를 aNumber의 배수로 응답하라.
truncated
0을 향해 절단된 수신자를 응답하라.