2017-11-22 20 views
2

Ada에서 레코드 유형의 속도 범위를 선언하고 싶습니다. 다음은 작동하지 않지만 작동하게하는 방법이 있습니까?Ada 범위를 무제한 상한으로 선언 할 수 있습니까?

--Speed in knots, range 0 to unlimited 
    Speed : float Range 0.0 .. unlimited ; 

난 그냥 당신은 할 수없는이 번호에 대한 제로 양의 값 ...

답변

4

을 원 -하지만 Speed 유형 Float이기 때문에, 그 값은 어쨌든 Float'Last를 초과 할 수 없습니다.

Speed : Float range 0.0 .. Float'Last; 

(당신은 가능성이 명시 적 유형 또는 하위 유형을 선언 할 수 있습니다.) 그냥 완성도, 당신은 또한 자신의 기본 플로트 유형을 정의하기보다는 하나 Float라고 사용할 수 있습니다

+0

그건 합리적인 것 같습니다. * why * ada가 모든 항목 근처의 특정 하위 유형을 좋아한다는 점을 여기서 다루는 질문이 있습니까? 나는 새롭고, C#에 익숙하다. 그리고 이것은 내 머리를 싸기 어렵다. – theMayer

+0

특정 하위 유형을 만드는 것이 좋은 생각 인 이유에 대해 좋은 답변이없는 것 같기 때문에 나는 다른 질문을 남겼습니다. 나는 Ada를 잘 배우려고 노력하고있다. – theMayer

4

하는 수도 있고하지 않을 수 당신이 필요로하는 범위가 있습니다.

예를 들어, 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 개 비트 수레를 지원하지 않는 경우
컴파일러는 불평을 할 수 있습니다.

+1

Float은 표준 패키지에 정의되어있다. "float 타입은 구현 정의 된 숫자이다."따라서 특정 정밀도에 의지 할 수 없다. Long_Float는 선택 사항이므로 절대로 사용해서는 안됩니다. –

2

무제한 수 없습니다. 그것은 무제한의 메모리를 필요로한다. 나는 그것을 가지고 모든 플랫폼의 인식 아니에요. 패키지를 작성 가능 사용 가능한 메모만큼 큰 유리수를 제공합니다. 스피가 (예를 들어 대한 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; 

하는 아마 너가 쫓고있는거야.

+0

명확히하기 위해 - 나는 무한대라는 의미에서 무제한을 의미하지는 않았지만, 아키텍처가 허용하는 최대 값이라는 의미에서 무제한을 의미했습니다. 그래서, 그 의미에서'Float'Last'는 그 값을 만족시킵니다. 당신이 선언의 범위에 타입의 속성을 넣을 수 있는지 몰랐습니다. – theMayer

+0

많은 컴파일러에서 Speed_Value'Last는 Float'Last보다 큽니다. –

+0

제한된 하위 유형을 선언하는 것과 반대로 변수 선언에 제약 조건을 두는 것의 차이점은 무엇입니까? – theMayer