아시다시피 Spotlight는 간단한 수학을 할 수 있습니다. 예를 들어, 입력 cos(pi)
하면 -1
예상 한대로 결과가 나타납니다 . 방금 입력했는데 cos(pi/2)
0이어야하지만 나에게 줬습니다 -5e-12
.
네 반올림 오류 일 가능성이 있지만 다음과 같이하십시오. cos(pi/2)
! 제 생각에는 분명히 버그처럼 보입니다. 어떻게 생각해?
답변
pi의 정밀도 부족과 내장 시스템의 전체 정밀도 부족으로 인한 것입니다.
pi = 3.1415926536
pi/2 = 1.5707963268
cos(1.5707963268) = -5.103412e-12
FYI = 5.103412e-12 = 0.000000000005103412 ~ 0
전체 시스템 정밀도 정보 :
3.141592653589793238462643383 = 3.1415926536
파이썬에서 우리는 다음을 얻습니다.
>>> float("3.141592653589793238462643383")
3.141592653589793
우리가 볼 수 있듯이 정밀도는 float 표현과 일치하지 않기 때문에 정밀도에 문제가 있습니다.
답변
특이한 부동 소수점 정밀도로 π를 저장하지 않습니다. 배정 밀도로 π에 대해 잘못된 값을 사용하고 있습니다. 이진수로 3.1415926536 을 근사 하려면 최소 38 비트가 필요합니다.
3.14159265359922… > 11.001001000011111101101010100010001001
2 ^ -36은 약 1.5e-11이며, 후행 99와 일치합니다. 배정 밀도 부동 소수점 은 52 비트 유효합니다. cos(pi/2)
-5e-12로 평가할 수있는 유일한 다른 선택은 48 비트 유형이며 매우 이상합니다.
미분 값이 거의 0 인 0과 π 근처에서 cos (θ)를 매우 정확하게 계산할 수 없습니다.
cos(3.1415926536) ≈ -0.999999999999999999999947911
-1 의해 5.2e-23에 대한 ε보다 작은 약 다르다고 double
때문에 cos(3.1415926536)
같이 계산된다 정확하게 -1 … 이는 부정확하다.
± π / 2 근처에서 미분 [ -sin (θ) ]은 거의 ± 1이므로 입력의 오차가 출력이됩니다.
cos(1.57079632679961) ≈ -4.71338076867830836e-12
cos(1.57079632679962) ≈ -4.72338076867830836e-12
cos(1.57079632680000) ≈ -5.10338076867830836e-12
하나의 작은 숫자를 표시 cos(π/2)
하고 -5.2e-12로 계산하는 TI 계산기가 있습니다. 그러나 전자적으로는 매우 다르며에 대한 정확한 가치를 제공하도록 설계되었습니다 cos(90°)
.
Spotlight에서 cos(pi/2)
π 값을 검색하고 10 진수 문자열로 변환 하여 (정확하고 합리적인) 이진 값으로 저장합니다 .1100100100001111110110101010001000100100001101101111 (또는 10000), 2로 나눈 다음 본질적으로 빼기 π / 2 의 실제 값 cos(pi/2 + cos(pi/2))
0에 더 가까운 지 확인해야 합니다 (-2.2e-35 일 수 있음).
2의 거듭 제곱으로 곱하면 유의 한 값이 아닌 지수에만 영향을 미칩니다. 반반 씩 반올림하거나 반올림하여 반올림을 적용하는 방법을 결정할 수 있습니다.
답변
10.9.2에서 재현 가능한 버그이며 이와 같은 부동 소수점 반올림 오류는 매우 일반적입니다.
내가 추측해야 할 경우 충분한 정밀도없이 처리되는 pi의 가치입니다.
- cos (999999 * pi)에 오류가 없습니다
- cos ((999999 + 1) * pi)에 오류가 있습니다-반올림 일 가능성이 있습니다
나는 향할 것 https://developer.apple.com/bug-reporting/ 당신이 행동 애플의 버그 수정 장치를보고 싶다면.
답변
다른 답변과 의견에서 다음이 명확 해집니다.
소프트웨어가 완벽하게 구현 되어도 부동 소수점 계산의 한계에 도달하더라도 0이 아닌 결과를 얻는 것은 버그가 아닙니다. 그러나 10 ^ -12 순서의 오류는 실제로 큽니다.
이것은 부동 소수점 숫자의 부정확성을 비난하지 않습니다. 당신이 얻는 결과는 다음과 같습니다.
cos(1.5707963268)
다른 소프트웨어 패키지를 사용하여 확인할 수 있습니다. cos(pi/2)
이러한 패키지 중 하나 에서 평가한다면 10 ^ -12보다 0에 훨씬 가까운 결과를 얻을 수 있습니다.
결론적으로 두 가지 가능한 제한 사항 중 하나를 적용해야합니다.
- Pi가 충분한 정밀도로 저장되지 않거나 적어도 pi / 2로 인해 정밀도가 충분하지 않습니다
- 왜냐하면 입력으로 정밀도가 충분하지 않습니다.
소프트웨어에 액세스 한 사람이이 중 어느 것을 적용하는지 확인할 수 있습니다.
업데이트
로 문제가 상수의 정확성 것 같다 주석에 언급 pi
.
답변
그 고려 -5e-12
verryyyy 적은 수있다, 이것은 이다 반올림 오류입니다.
나는 그것이 pi
삼각 함수를 계산하는 데 사용되는 상수 또는 무한 시리즈 의 정의에 사용되는 것보다 많은 소수점을 보여주는 스포트라이트의 결과라고 생각합니다 .