C++ 11은 erf 및 erfc과 같은 표준에서 매우 유용한 수학 함수를 도입했습니다. 특정 값보다 크거나 작은 입력에 대해서는 "언더 플로우 보장"에 대한 언급이 있지만 정밀도 측면에서 이것이 무엇을 의미하는지 명확하게 이해하기 위해서는 부동 소수점 표현에 대해 충분히 알지 못합니다.std :: erf의 정밀도는 무엇입니까?
이 질문에 대한 답변은 다음과 같습니다. 표준 라이브러리에 의해 구현 된 근사값으로부터 어떤 정밀도 (적어도 크기의 차수)를 기대할 수 있습니까?
지정되지 않았습니다. 나는 C++ 구현이 한 라디안의 사인을 요구할 때'42.0 '이라고 말할 수 있다고 믿습니다. 그러나 실제로는 배정도'erf'가 충실하게 반올림되었다고 가정 할 수 있습니다. 먹인 숫자에 가장 가까운 두 부동 소수점 숫자 중 하나를 얻을 수 있습니다. – tmyklebu
@tmyklebu 나는 당신을 믿고 싶다. 그러나 그 숫자를 얻는다 고 가정하면, 표준 구현은 최소한 17 자리의 십진수를 가짐을 의미한다. 나는 (gcc와 clang) 사용하는 C++ 컴파일러의 벤더들을 존경하고 신뢰하지만, 이것은 내가 알 수있는 근사값의 대부분이 10 진수 7 자리의 정밀도를 넘지 않는다는 것을 고려하면 무리한 가정이라고 생각된다. 나는 불평하지 않는다. 나는 그것이 다소 조잡한 근사치가 될 것으로 기대한다, 나는 단지 내가 얼마나 조잡한 지 알 수 있기를 바란다. – Sheljohn
매우 가깝지 않은 근사값을 제외하고는 "숫자"에서 이와 같은 함수의 정밀도를 측정 할 수 없습니다. 'x/3' 함수에 대해서도'double '을 반환하는 것은 17 자리까지는 올바르지 않습니다. 입력 '29'를 고려하십시오. "표준 C++"의 의미에서 "표준 구현"은 없지만 glibc의 것은 충실하게 둥글게 처리되어 있습니다. Apple이 잘했으면 좋겠어요. 나는 fdlibm의'erf' /'erfc'를 검사하지 않았습니다. – tmyklebu