2009-07-29 2 views
3

정밀 손실은 한 가지이지만 정밀 이득 ??? 그것은이 결과,SQL Server는 부동 소수점에 대한 추가 정밀도를 구성합니까?

41.88694340165634 -87.60841369628906 

내가이 붙여 SQL 서버 MGMT 스튜디오 테이블 뷰에 : 나는 꿈을 꾸고

41.886943401656339 -87.608413696289062 

나는 다음과 같은 좌표/w 텍스트 파일이? 이것이 어떻게 가능한지?

메모장에서 붙여 넣기 중이며 원시 텍스트입니다. 문자를 직접 입력하면 같은 문제가 발생합니다.

어디에서 SQL Server가 추가 정밀도를 얻습니까? 책 - 온 - 라인에 따르면

+2

지구상의 위도와 경도 좌표 인 경우 지구 사이의 거리는 약 1 나노 미터입니다. (즉, 실제로 응용 프로그램에 문제가 발생하는 경우 @GMastros와 @Hova가 모두 올바른 것입니다.) –

답변

3

:

플로트 : 소수 데이터를 떠와 함께 사용하기위한 대략적인 번호 데이터 형식. 부동 소수점 데이터는 대략입니다. 따라서 데이터 유형 범위의 모든 값을 정확히 나타낼 수있는 것은 아닙니다.

강조 광산.

+0

문제의 요점이 누락되었습니다. ADDING 정밀도가 아니라 SUBTRACTING입니다. 여분의 소수 자리를 어디서 얻을 수 있습니까? 그냥 하늘에서 그들을 끌어내는 것뿐입니다. – Scott

+0

@Scott 플로트가 정확히 41.88694340165634를 차지할 수 없으므로 플로트가 41.886943401656339와 같은 가까운 값이됩니다. –

1

나는 개인적으로 이것을 보지 못했지만 SQL 서버 관리 스튜디오가 float의 "표현"즉 값이 db에 저장되는 방법을 보여줄 수 있습니다. 어쨌든 수레는 모두 근사치임을 기억하십시오.

+0

하지만 정밀도가 떨어지는 현상을 설명 할 수는 있지만 정확하지는 않습니다. – Scott

+1

아닙니다. @hova가 지적했듯이, 정확성 자체가 아닙니다. 수레가 어떻게 저장되는지와 관련이 있습니다. 41.88694340165634는 float에 사용할 수있는 비트에 저장할 수 없기 때문에 가장 가까운 aviable 표현을 저장합니다. float가 내부적으로 어떻게 표현되는지 이해하려면 여기를 살펴보십시오. http://steve.hollasch.net/cgindex/coding/ieeefloat.html – nagul

+0

가상의 상황을 고려하십시오. 가상의 flaot에 x 비트에 1.0을 저장할 수 없다고 가정 해 봅시다. . 그러면 우리는 무엇을 할 수 있습니까? 우리는 가장 가까운 숫자를 1에 저장할 수 있습니다.이 숫자는 flaot에 넣을 수 있습니다. 0.99999 또는 0.999 또는 0.9 또는 1.000001 또는 다른 근사치를 사용할 수 있습니다. 여기서 중요한 것은 정밀도를 높이 지 않고 단지 가장 가까운 값을 1.0에 저장한다는 것입니다. 따라서 flaot은 "approximate"데이터 유형이며 float와 같습니다. 통찰력 덕분에 – nagul

6

정밀도가 추가되지 않고 가장 가까운 IEEE 부동 소수점 표현으로 반올림됩니다. 10 진수로 변환하면 정밀도를 얻은 것처럼 보입니다.

+0

지금은 이해가됩니다. – Scott

관련 문제