문제

VB6의 MSDN 도움에 따르면

부동 소수점 값은 mmmeeee 또는 mmmdeee로 표현 될 수 있으며, 여기서 MMM은 Mantissa이고 EEE는 지수 (10)입니다. 단일 데이터 유형의 가장 높은 양수 값은 3.402823E+38, 또는 38 번째 전력에서 3.4 배입니다. 이중 데이터 유형의 가장 높은 양수 값은 1.79769313486232d+308 또는 308 번째 전력에서 약 1.8 배입니다. 숫자 문자에서 Mantissa와 지수를 분리하기 위해 D를 사용하면 값이 이중 데이터 유형으로 취급됩니다. 마찬가지로, 동일한 방식으로 E를 사용하면 값이 단일 데이터 유형으로 취급됩니다.

이제 VB6 IDE에서 나는 이것을 입력하려고 노력했습니다.

const MAX_DOUBLE as Double = 1.79769313486232D+308

그러나 내가 그 라인에서 멀어 지자마자 IDE는 오류 6 (오버플로)을 던집니다.

과제 대상의 한계를 초과하는 과제를 만들려고 할 때 오버플로 결과가 발생합니다. ...

그렇다면 어떻게 max_double (및 해당 문제에 대한 Min_double)을 정의하는 방법은 무엇입니까?

도움이 되었습니까?

해결책

Const 여야합니까? 바이트 어레이에서 copymemory를 사용하여 올바른 비트 패턴을 설정하여 Max_Double의 정확한 값을 변수로 가져올 수 있습니다.

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

Dim Max As Double
Dim Idx As Long
Dim Bits(0 To 7) As Byte

For Idx = 0 To 5
   Bits(Idx) = 255
Next
Bits(6) = 239 ' = 11101111
Bits(7) = 127

For Idx = 0 To 7
   CopyMemory ByVal VarPtr(Max) + Idx, Bits(Idx), 1
Next

Debug.Print Max

편집 : 나는 당신이 Min_double에 대해 물어 보는 것을 잊었습니다.

Dim Min As Double
Dim Bits As Byte

Bits = 1
CopyMemory ByVal VarPtr(Min), Bits, 1

Debug.Print Min

다른 팁

편집 : 해결했습니다!

Const test As Double = 1.79769313486231E+308 + 5.88768018655736E+293

이진 수준으로 두 번 확인했는데, 이는 갈 수있는만큼 높아야합니다. 1 등과 같은 값을 계속 추가 할 수는 있지만 그보다 크지 않은 숫자를 얻습니다. 출력은 다음과 같습니다. 01111111 | 11101111 | 11111111 | 11111111 | 11111111 | 11111111 | 11111111 | 11111111은 실제로 DoubleMax입니다.

오래된 : 당신은 그냥 사용할 수 있습니다 긍정적 인 무한.

명백한 실용적인 해결 방법 : 숫자를 약간 줄입니다.

Const MAX_DOUBLE As Double = 1.79769313486231E+308

대부분의 상황에서는 그것이 적절하다고 생각합니다.

아래와 같이 "d"대신 숫자의 지수에 "e"를 사용하십시오.

Public Const MAX_DOUBLE = 1.79769313486232E+308

편집하다

아래 링크를 살펴보고 바닥으로 스크롤하십시오. 이 구체적인 코드 예제는이 구성이 어떻게 사용되는지 보여줍니다. 바라건대 이것은 도움이됩니다.

http://www.experts-exchange.com/programming/languages/.net/visual_basic.net/q_22555684.html

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top