2009-04-15 4 views
3

double.Epsilon != std::numeric_limits<double>::min()입니까? 내 PC에double.Epsilon vs std :: numeric_limits <double> :: min()

: double.Epsilon == 4.9406564584124654E-324와는 .NET에 정의되어 std::numeric_limits<double>::min() == 2.2250738585072014e-308

는 .NET에서 2.2250738585072014e-308 얻을 수있는 방법이 있나요?

double epsilon() { return std::numeric_limits<double>::min(); } 

왜 당신이 비록 원하는 것 :

답변

9

double.Epsilon을 나타내는 가장 작은 값을으로 반환하기 때문에 다릅니다. numeric_limits<double>::min()은 가장 작은 을 정규화 된 값으로 반환합니다.

기본적으로 double.Epsilonnumeric_limits<double>::denorm_min()과 같습니다.

.NET에서 동등한 효과를 얻는 가장 쉬운 방법은 최소 정규화 된 숫자의 비트 패턴을 해결하고 BitConverter.Int64BitsToDouble을 사용하는 것입니다.

+0

정확히 내가 찾던 대답의 종류. 감사합니다 Jon – sthiers

1

그럼 당신은 값을 반환하는 C++/CLI를 사용할 수 있을까? 왜 그들은 동일해야합니까? 부동 소수점 숫자의 가장자리를 스케이팅하지 않도록해야합니다.

-2

엡실론은 두 개의 두 배 사이의 가능한 최소 차이입니다. (편집 : 정확하지 않은,이 경우 최소한의 양수가 아닌 0이 아닌 숫자입니다.)

double.MinValue 

입니다.

+1

OP는 작지만 양수를 찾습니다. double.MinValue는 방대한 양수입니다. –

+0

? 내 생각에, numeric_limits는 최소 0이 아닌 숫자로 표현할 수있는 최소값을 반환합니다. – nothrow

+0

"std :: numeric_limits :: min() == 2.2250738585072014e-308" –