[크리스탈과 ○○] 크리스탈과 수치형
크리스탈의 수치 처리는 성능 등의 호환성 때문에 일반적으로 사용되는 수치는 고정 길이의 정수형이나 부동 소수점형의 대상이다.
데이터의 길이에 따라 서로 다른 유형의, 정수형의 부호가 있는지 없는지를 준비하여 분리한 것은 C언어를 씹어본 사람에게 익숙한 사고방식이지만 고정된 길이의 정수의 자릿수가 넘치는 문제를 고려해야 한다.정수가 아무리 커도 인터저형으로 모든 것을 돌보는 루비에 익숙해진 사람에게는 조금 주의가 필요할 수 있다.
다른 한편, 크리스탈의 세계에서 모든 데이터는 대상이고 자바가 말한'원시형'과 같은 데이터 유형은 존재하지 않는다.예를 들어 Flat64(64비트 부동점수) 유형의 대상
1 + 0.5
을 실제 Int32(32비트 기호가 있는 정수) 유형의 대상1
에 매개 변수로 주어 실현한다+
.루비에 익숙한 사람에게는 이런 생각은 비교적 쉽게 받아들일 수 있겠지.디지털 유형의 상속 관계
Number(수치)
Int (정수)
Int8(8-비트 정수)
Int16(16비트 정수)
32비트 정수 포함 Int32
Int64(정수 64비트 포함)
Int128(기호가 있는 정수)❗️
UInt8(8-특수 정수 없음)
UInt16(16-특수 정수 없음)
UInt32(32 비트 특수 정수 없음)
UInt64(64비트 특수 정수 없음)
UInt128 (기호 없는 정수 128bit)❗️
BigInt(복수 정수)
Flat(부동 소수점 값)
Flat 32(32비트 부동 소수점)
Flat64(64비트 부동 소수점)
BigFlat(복수 부동 소수점)
BigDecimal(여러 배 길이 10진수)
BigRational(여러 배 유리)
Commprex(복수)
기본적으로 실제 응용의 문제가 되지 않기 때문에 걱정된다면 이러한 지원이 완료되기 전에 고정장정수형을 사용할 때 64bit 길이로 유지하는 것이 좋다.
Number형
복수를 제외한 모든 수치형의 기초형, 사칙연산과 0의 개념, 기타 수치의 크기와 비교 등 수치로서 기본적으로 가지고 있는 기능을 정의했다.
넘버형은 추상형으로 직접 실례화할 수 없다.
인트형
모든 정수형의 기초형에서 Number형이 정의하는 방법은 정수를 다시 쓰거나 비트 연산 등 정수 특유의 기능이 정의된다.
인트형도 추상형으로 직접 실례화할 수 없다.
Int~형
고정 길이를 나타내는 기호가 있는 정수형,'~'부분은 5가지 유형이 있는데 각각 8, 16, 32, 64128비트 길이가 있다.
데이터 길이가 Nbit인 부호 정수형으로 표시할 수 있는 정수 값 i의 범위는 -2^{N-1}<=i<=2^{N-1}-1이다.
Type
MIN
MAX
Int8
-128
127
Int16
-32,768
32,767
Int32
-2,147,483,648
2,147,483,647
Int64
-9,223,372,036,854,775,808
9,223,372,036,854,775,807
Int128
-170,141,183,460,469,231,731,687,303,715,884,105,728
170,141,183,460,469,231,731,687,303,715,884,105,727
이러한 범위를 초과하는 값이 계산 결과에 표시되면 실행 시 OverflowError가 발생하므로 주의해야 합니다.
Int32::MAX + 1
#=> Unhandled exception: Arithmetic overflow (OverflowError)
UInt~형
고정 길이를 나타내는 무기호 정수형,'~'부분은 8, 16, 32, 64128비트 길이의 5가지 유형이 있다.
데이터 길이가 N bit인 무기호 정수형으로 표시할 수 있는 정수 값 i의 범위는 0<=i<=2^N-1입니다.
Type
MIN
MAX
Int8
0
255
Int16
0
65,535
Int32
0
4,294,967,295
Int64
0
18,446,744,073,709,551,615
Int128
0
340,282,366,920,938,463,463,374,607,431,768,211,455
이러한 범위를 초과하는 값이 계산 결과에 표시되면 OverflowError는 기호가 있는 정수와 동일하게 발생합니다.
UInt32::MAX + 1
#=> Unhandled exception: Arithmetic overflow (OverflowError)
BigInt형
GMP는 라이브러리를 사용하는 여러 배의 정수형을 나타낸다.
규격상의 상한선도 있는 것 같은데, 어쨌든 2^{1000000}(2의 100만 곱하기, 30303030위) 정도의 수치는 계산할 수 있는데, 너무 큰 제한이 없다면 상한치는 실용적인 제한이 되지 않을 것이다.
2^{10000000}(2의 1천만 곱하기)도 계산된 것 같은데, 결과적으로 출력 중Mac가 다운되었습니다.아마도 300만 자리가 넘는 문자열을 만드는 처리가 너무 무거웠을 것이다.
Flat형
모든 부동 소수점 숫자형의 기초형으로 Number형은 부동 소수점 수위 초과 지출을 정의하고 일부 특유의 기능을 정의한다.
플랫형도 추상형으로 직접 실례화할 수 없다.
Flat~형
'~'의 부분에 32, 64비트 길이를 포함하는 두 가지 유형이 존재하는데 각각 IEEE754 표준화된 Binary 32(단정밀도 부동 소수점 수치),binary 64배 정밀도 부동 소수수를 처리한다.
BigFlat형
GMP는 라이브러리의 여러 배 부동 소수점 수치를 사용하는 유형을 나타낸다.
BigDecimal형
정수(V)와 소수점 이하의 자릿수(S)를 지정하여 임의의 정밀도를 나타내는 기호가 있는 십진수(V*10^{S-S})를 표시합니다.
빅데시멜은 플랫과 마찬가지로 주로 소수의 유형을 다루지만, 특히 이런 구조가 필요한 이유는 플랫형(IEEE754 표준화된 부동점수)이 표현할 수 없는 값이 존재하기 때문이며, 주변에 0.1 등도 이런 값 중 하나다.
일반적으로 사용 시 문제가 발생하지 않는 수준 오차이지만 엄격한 수치 계산이 필요한 경우 BigDecimal이 필요할 수 있습니다.
BigRational형
GMP는 라이브러리의 여러 배의 유리수를 사용하는 유형을 나타낸다.
한마디로 분자와 분모를 지정해 점수를 처리할 수 있는 유형이라고 생각하는 것은 기본적으로 옳다.
예를 들어
0.5
등은 0.33333...일반적인 인트나 플랫으로는 표현할 수 없지만, 빅레이션형인 경우1 / 3
는 엄격하게 처리할 수 있다.Commplex형
허수 i를 포함하는 복수를 처리하는 형식입니다.
처리 수치의 유형 중 유일하게 Number형을 계승하지 않았지만 Number시스템 유형과 네 가지 연산을 정의하여 다른 수치형과 어느 정도 계산할 수 있다.
또한 복수 특유의 조작으로 개별적으로 실수부/허수부를 얻고 공멍복수와 위상을 얻는 방법 등을 정의했다.
이번 총결산
Reference
이 문제에 관하여([크리스탈과 ○○] 크리스탈과 수치형), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/arcage/articles/crystal_and_number_types텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)