Advertisement
Guest User

Sanya

a guest
Oct 20th, 2019
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.42 KB | None | 0 0
  1. <?php
  2. main();
  3.  
  4. function main(){
  5.   // CONSTANTS:
  6.   $X = "1874017748.22052000"; // числа в строках для удобного точного подсчета
  7.   $Y = "0.187401774822052000";
  8.  
  9.   echo "Исчезновение операнда: ";
  10.   $validRes = bcadd($X, $Y, 20); // сложение для получения реального ответа
  11.   $roundTo = 9; // по заданию необходимо округлить до 9 знаков после запятой
  12.   $countedRes = bcadd(
  13.     bcadd($X, 0, $roundTo),
  14.     bcadd($Y, 0, $roundTo),
  15.     $roundTo); // посчитанный результат двух чисел, округленных до 9 знаков после запятой
  16.   $countedResStr = strval($countedRes); // переведем, в строку
  17.   $mistakes = mistakesCount($validRes, $countedResStr); // получаем массив, который вернули в функции mistakesCount
  18.   echo "Абсолютная ошибка: ", $mistakes["absMistake"], "; Относительная ошибка: ", $mistakes["relMistake"], " | ";
  19.  
  20.   echo "Умножение ошибки: ";
  21.   $z = bcsub($X, "0.00000001", 20);
  22.   $withoutMistake = bcmul($X, $X, 20);
  23.   $withMistake = bcmul($X, $z, 20);
  24.   $mistakes = mistakesCount($withoutMistake, $withMistake); // получаем массив, который вернули в функции mistakesCount
  25.   echo "Абсолютная ошибка: ", $mistakes["absMistake"], "; Относительная ошибка: ", $mistakes["relMistake"], " | ";
  26.  
  27.   echo "Потеря значимости: ";
  28.   $k = bcadd($X, 0); // прибавляем к иксу 0, фактически получая то же самое, но округляем до целого
  29.   $mistakes = mistakesCount($X, $k); // получаем массив, который вернули в функции mistakesCount
  30.   echo "Абсолютная ошибка: ", $mistakes["absMistake"], "; Относительная ошибка: ", $mistakes["relMistake"], " | ";
  31. }
  32.  
  33. function mistakesCount($validRes, $countedRes){
  34.   $absMistake = bcsub($validRes, $countedRes, 20); // считаем абс ош
  35.   $relMistake = bcdiv($absMistake, $validRes, 20); // относительную ош не с 10 знаками, так как требуется больше
  36.   return array(
  37.       "absMistake" => $absMistake,
  38.       "relMistake" => $relMistake
  39.     );
  40. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement