Advertisement
Guest User

Untitled

a guest
Oct 17th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.40 KB | None | 0 0
  1. public class Pogreshnost {
  2.  
  3.     public float    x1 = 17730.14737107011999f, y1, c1, c12, z1, m11, m12, k1;
  4.     public double   x2 = 17730.14737107011999, y2, c2, c22, z2, m21, m22, k2;
  5.  
  6.     public Pogreshnost(){
  7.         // Проверка для float типа
  8.  
  9.         // Исчезновение наименее значимого операнда
  10.         System.out.println("======== Ошибки для типа float ======== \n");
  11.  
  12.         y1  = x1*0.0000000001f; // из задания
  13.         System.out.println("x = " + x1 + "\ny = " + y1); // выводим x и y
  14.  
  15.         c1  = x1 + y1; // наглядно произойдёт исчезновение операнда y1, тк он много меньше x1
  16.         System.out.println("\n======== Ошибка Исчезновения Операнда ========\nc = x + y = " + c1); // выводим сумму c = x+y
  17.  
  18.         c12 = (float)Math.rint(c1*1000000000f) / 1000000000f; //округляем с точностью до 9 знаков
  19.         System.out.println("\nc' (округ. до 9 знаков)= " + c12); //выводим предыдущий результат округления
  20.  
  21.         // посчитаем абсолютную и относительную ошибки
  22.         System.out.println("\nАбсолютная ошибка А = " + Math.abs(c1-c12) + "\nОтносительная ошибка (10 знаков) = " + (float)Math.rint((Math.abs(c1-c12)/c1)*10000000000f)/10000000000f);
  23.         //для чисел типа float в java Это слишком большая точность, числа считаются идентичными
  24.  
  25.  
  26.         // Умножение ошибки
  27.         z1 = x1 + 0.00000001f; // ошибка в младшем разряде 8 знаков после запятой
  28.         System.out.println("\n======== Ошибка Умножения ========\nЗначение x с ошибкой: z = " + z1); // выводим значение x с ошибкой
  29.  
  30.         m11 = x1*x1;
  31.         System.out.println("\nУмножение без ошибки m = x * x = " + m11 ); //умножение без ошибки
  32.  
  33.         m12 = x1*z1;
  34.         System.out.println("\nУмножение с ошибкой n = x * z = " + m12 ); //умножение без ошибки
  35.  
  36.         // посчитаем абсолютную и относительную ошибки
  37.         System.out.println("\nАбсолютная ошибка А = " + Math.abs(m11 - m12) + "\nОтносительная ошибка (10 знаков) = " + (float)Math.rint((Math.abs(m11-m12)/x1)*10000000000f)/10000000000f);
  38.         //для чисел типа float в java Это слишком большая точность, числа считаются идентичными
  39.  
  40.  
  41.         //Потеря значимости
  42.         k1 = (float)Math.rint(x1); // округление x до целого
  43.         System.out.println("\n======== Потеря значимости ========\nОкругление x до целого: k = " + k1);
  44.         System.out.println("\nАбсолютная ошибка А = " + Math.abs(x1 - k1) + "\nОтносительная ошибка (10 знаков) = " + (float)Math.rint((Math.abs(x1-k1)/x1)*10000000000f)/10000000000f);
  45.  
  46.  
  47.  
  48.  
  49.         // Проверка для double типа
  50.  
  51.         // Исчезновение наименее значимого операнда
  52.         System.out.println("\n\n======== Ошибки для типа double ======== \n");
  53.  
  54.         y2  = x2*0.0000000001d; // из задания
  55.         System.out.println("x = " + x2 + "\ny = " + y2); // выводим x и y
  56.  
  57.         c2  = x2 + y2; // здесь исчезновение операнда произойдёт частично, тк у double большая точность
  58.         System.out.println("\n======== Ошибка Исчезновения Операнда ========\nc = x + y = " + c2); // выводим сумму c = x+y
  59.  
  60.         c22 = Math.rint(c2*1000000000d) / 1000000000d; //округляем с точностью до 9 знаков
  61.         System.out.println("\nc' (округ. до 9 знаков)= " + c22); //выводим предыдущий результат округления
  62.  
  63.         // посчитаем абсолютную и относительную ошибки
  64.         System.out.println("\nАбсолютная ошибка А = " + Math.abs(c2-c22) + "\nОтносительная ошибка (10 знаков) = " + Math.rint((Math.abs(c2-c22)/c2)*10000000000d)/10000000000d);
  65.         //для чисел типа float в java Это слишком большая точность, числа считаются идентичными
  66.  
  67.  
  68.         // Умножение ошибки
  69.         z2 = x2 + 0.00000001d; // ошибка в младшем разряде 8 знаков после запятой
  70.         System.out.println("\n======== Ошибка Умножения ========\nЗначение x с ошибкой: z = " + z2); // выводим значение x с ошибкой
  71.  
  72.         m21 = x2*x2;
  73.         System.out.println("\nУмножение без ошибки m = x * x = " + m21 ); //умножение без ошибки
  74.  
  75.         m22 = x2*z2;
  76.         System.out.println("\nУмножение с ошибкой n = x * z = " + m22 ); //умножение с ошибкой
  77.  
  78.         // посчитаем абсолютную и относительную ошибки
  79.         System.out.println("\nАбсолютная ошибка А = " + Math.abs(m21 - m22) + "\nОтносительная ошибка (10 знаков) = " + Math.rint((Math.abs(m21-m22)/x2)*10000000000d)/10000000000d);
  80.         //Происходит поглощение наиболее маленького операнда и числа остаются идентичными
  81.  
  82.  
  83.         //Потеря значимости
  84.         k2 = Math.rint(x2); // округление x до целого
  85.         System.out.println("\n======== Потеря значимости ========\nОкругление x до целого: k = " + k1);
  86.         System.out.println("\nАбсолютная ошибка А = " + Math.abs(x2 - k2) + "\nОтносительная ошибка (10 знаков) = " + Math.rint((Math.abs(x2-k2)/x2)*10000000000d)/10000000000d);
  87.     }
  88.  
  89.     public static void main(String[] args){
  90.         Pogreshnost check = new Pogreshnost();
  91.     }
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement