Пређи на садржај

Губитак значаја

С Википедије, слободне енциклопедије

Губитак значаја је непожељан ефекат у прорачунима користећи фину прецизну аритметику као што је аритметика са плутајућим тачкама. Појављује се када операција на два броја повећава релативну грешку значајно више него што повећава апсолутну грешку, на пример у одузимању два скоро једнака броја (позната као катастрофална отказивање). Ефекат је да се број значајних цифара у резултату смањује неприхватљиво. У нумеричкој анализи се истражују начини за избјегавање овог ефекта.[1]

Демонстрација проблема[уреди | уреди извор]

Ефекат се може показати децималним бројевима. Следећи пример показује губитак значаја за тип података са децималним бројем плутајућих места са 10 значајних цифара:[2]

Размотримо децимални број

 0,1234567891234567890

Представљање овог броја са плутајућом тачком на машини која држи 10 бројева са плутајућим тачкама биће

  0,1234567891

што је прилично близу када се мери грешка као проценат вредности. Веома је другачија када се мери у редоследу прецизности. Први је тачан на 10 × 10-20, док је други тачан до 10 × 10-10. Сада извршите обрачун

0,1234567891234567890 − 0,1234567890000000000

Одговор је тачан до 20 значајних цифара

  0,0000000001234567890

Међутим, на машини са 10 цифара са покретним зарезом, израчунавање даје

  0,1234567891 − 0,1234567890 = 0,0000000001

У оба случаја резултат је тачан на исти ред величине као и улази (-20 и -10). У другом случају, чини се да је одговор имао једну значајну цифру, што би значило губитак значаја. Међутим, у рачунарској аритметици са плутајућим тачкама, све операције се могу посматрати као извршене на антилогаритама, за које правила за значајне бројке указују на то да број значајних цифара остаје исти као и најмањи број значајних цифри у мантизама. Начин на који то указује и представља одговор на 10 значајних бројки је:

1,000000000×10−10

Решења[уреди | уреди извор]

Могуће је изводити рачуне користећи тачну фракциону репрезентацију рационалних бројева и задржати све значајне цифре, али ово је често превише спорије од аритметике са плутајућим тачкама. Осим тога, обично само одлаже проблем: Шта ако су подаци тачни само за десет цифара? Исти ефекат ће се догодити. Један од најважнијих делова нумеричке анализе је да се избегне или минимизирају губитак значаја у прорачунима. Ако је основни проблем добро постављен, требало би да постоји стабилан алгоритам за његово решавање.[3]

Референце[уреди | уреди извор]

  1. ^ Press, William H.; Flannery, Brian P.; Teukolsky, Saul A.; Vetterling, William T. (1992), Numerical Recipes in C (Second ed.), Section 5.6: "Quadratic and Cubic Equations.
  2. ^ Kahan, Willian (November 20, 2004), On the Cost of Floating-Point Computation Without Extra-Precise Arithmetic (PDF), retrieved 2012-12-25
  3. ^ Higham, Nicholas J., (2002). Accuracy and stability of numerical algorithms (2. изд.). Philadelphia: Society for Industrial and Applied Mathematics. ISBN 978-0-89871-521-7. OCLC 50022954.