Ada에서 레코드 유형의 속도 범위를 선언하고 싶습니다. 다음은 작동하지 않지만 작동하게하는 방법이 있습니까?Ada 범위를 무제한 상한으로 선언 할 수 있습니까?
--Speed in knots, range 0 to unlimited
Speed : float Range 0.0 .. unlimited ;
난 그냥 당신은 할 수없는이 번호에 대한 제로 양의 값 ...
Ada에서 레코드 유형의 속도 범위를 선언하고 싶습니다. 다음은 작동하지 않지만 작동하게하는 방법이 있습니까?Ada 범위를 무제한 상한으로 선언 할 수 있습니까?
--Speed in knots, range 0 to unlimited
Speed : float Range 0.0 .. unlimited ;
난 그냥 당신은 할 수없는이 번호에 대한 제로 양의 값 ...
을 원 -하지만 Speed
유형 Float
이기 때문에, 그 값은 어쨌든 Float'Last
를 초과 할 수 없습니다.
Speed : Float range 0.0 .. Float'Last;
(당신은 가능성이 명시 적 유형 또는 하위 유형을 선언 할 수 있습니다.) 그냥 완성도, 당신은 또한 자신의 기본 플로트 유형을 정의하기보다는 하나 Float
라고 사용할 수 있습니다
하는 수도 있고하지 않을 수 당신이 필요로하는 범위가 있습니다.
예를 들어, Float
각각 당신에게 7, 15 자리의 정밀도를 제공, 아마 type Long_Float is digits 15;
함께 type Float is digits 7;
으로, 컴파일러 또는 RTS (런타임 시스템) 소스 어딘가에 정의된다.
응용 프로그램이 요구하는 정밀도와 범위를 충족 시키려면 마찬가지로 정의 할 수 있습니다. 철학은 필요한 범위와 정밀도를 명시하고 컴파일러가 가장 효율적으로 만족하도록합니다. 이는 문제 영역에서 프로그래밍으로, 솔루션 도메인이 아닌 특정 시스템이나 컴파일러가 지원하는 프로그램에 바인딩하여 원하는 것을 말합니다.
컴파일러는 다음으로 높은 정밀도를 기본 플로트 (일반적으로 IEEE 32 비트 또는 64 비트 수레)를 사용하거나 할 수없는 것을 불평 그 중 하나
(예를 들어, 당신은
type Extra_Long_Float is digits 33 range 0.0 .. Long_Float'Last * Long_Float'Last;
를 선언하는 경우 그것은 128 개 비트 수레를 지원하지 않는 경우
컴파일러는 불평을 할 수 있습니다.
Float은 표준 패키지에 정의되어있다. "float 타입은 구현 정의 된 숫자이다."따라서 특정 정밀도에 의지 할 수 없다. Long_Float는 선택 사항이므로 절대로 사용해서는 안됩니다. –
무제한 수 없습니다. 그것은 무제한의 메모리를 필요로한다. 나는 그것을 가지고 모든 플랫폼의 인식 아니에요. 패키지를 작성 가능 사용 가능한 메모만큼 큰 유리수를 제공합니다. 스피가 (예를 들어 대한 PragmAda Reusable Components에서 PragmARC.Rational_Numbers 참조) 처리 할 수 있지만, 당신이에 관심이 무엇 아마도 아니다 당신은 당신의 컴파일러에서 지원하는 최대 정확하게 자신의 유형을 선언 할 수 있습니다.
type Speed_Value_Base is digits System.Max_Digits;
subtype Speed_Value is Speed_Value_Base range 0.0 .. Speed_Value_Base'Last;
Speed : Speed_Value;
하는 아마 너가 쫓고있는거야.
그건 합리적인 것 같습니다. * why * ada가 모든 항목 근처의 특정 하위 유형을 좋아한다는 점을 여기서 다루는 질문이 있습니까? 나는 새롭고, C#에 익숙하다. 그리고 이것은 내 머리를 싸기 어렵다. – theMayer
특정 하위 유형을 만드는 것이 좋은 생각 인 이유에 대해 좋은 답변이없는 것 같기 때문에 나는 다른 질문을 남겼습니다. 나는 Ada를 잘 배우려고 노력하고있다. – theMayer