>  기사  >  백엔드 개발  >  정확한 누적을 위해 부동 소수점 추가 순서가 중요합니까?

정확한 누적을 위해 부동 소수점 추가 순서가 중요합니까?

DDD
DDD원래의
2024-11-01 21:22:29931검색

Does the order of floating-point addition matter for accurate accumulation?

부동 소수점 누적: 정밀도와 순서

부동 소수점 숫자를 누적할 때 추가되는 순서는 상당한 영향을 미칠 수 있습니다. 결과의 정밀도에 영향을 줍니다.

정밀도 향상을 위한 오름차순

당신의 직감이 맞습니다. 숫자를 오름차순으로 추가하면 일반적으로 정밀도가 향상됩니다. 단정밀도 부동 소수점을 사용하는 시나리오를 생각해 보세요.

  • 극단적인 경우: 1/(10억)의 10억 값과 1의 한 값을 더한 것입니다.

1을 먼저 더하면 정밀도가 떨어지기 때문에 합이 1이 됩니다. 다른 값을 추가해도 아무런 영향이 없습니다.

작은 값을 먼저 추가하면 어느 정도 누적되지만 특정 지점이 지나면 정밀도도 떨어집니다.

음수 값 및 부정확성

그러나 음수가 포함되면 오름차순이 부적절해질 수 있습니다. 다음 값을 고려하십시오: 1, -1, 10억분의 1.

2개의 주문만이 올바른 결과(10억분의 1)를 생성합니다: 1, -1, 10억분의 1 또는 -1, 1, 10억분의 1. 나머지 주문에 대해서는 결과가 부정확합니다.

고급 축적 기법

극단적인 경우에는 더욱 고급 기법이 필요합니다.

  • 규모별 누계: 규모에 따라 값을 그룹으로 나누고 각 그룹의 합계를 계산합니다. 임의 정밀도 유형을 효과적으로 사용하여 이러한 합계를 오름차순으로 결합합니다.

실제 프로그래밍과의 관련성

이 문제는 직접적인 관련이 없어 보일 수도 있습니다. 실제 프로그래밍의 경우 특정 시나리오에서 발생할 수 있습니다.

  • 작고 중요하지 않은 값과 몇 가지 큰 값을 누적하면 정밀도가 손상될 수 있습니다.
  • 두꺼운 꼬리(수많은 꼬리)를 처리할 때 개별적으로 합계에 영향을 주지 않을 수 있는 작은 값) 또는 작은 값의 추가 조합으로 인한 정밀도 손실.

위 내용은 정확한 누적을 위해 부동 소수점 추가 순서가 중요합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.