Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class Pogreshnost {
- public float x1 = 17730.14737107011999f, y1, c1, c12, z1, m11, m12, k1;
- public double x2 = 17730.14737107011999, y2, c2, c22, z2, m21, m22, k2;
- public Pogreshnost(){
- // Проверка для float типа
- // Исчезновение наименее значимого операнда
- System.out.println("======== Ошибки для типа float ======== \n");
- y1 = x1*0.0000000001f; // из задания
- System.out.println("x = " + x1 + "\ny = " + y1); // выводим x и y
- c1 = x1 + y1; // наглядно произойдёт исчезновение операнда y1, тк он много меньше x1
- System.out.println("\n======== Ошибка Исчезновения Операнда ========\nc = x + y = " + c1); // выводим сумму c = x+y
- c12 = (float)Math.rint(c1*1000000000f) / 1000000000f; //округляем с точностью до 9 знаков
- System.out.println("\nc' (округ. до 9 знаков)= " + c12); //выводим предыдущий результат округления
- // посчитаем абсолютную и относительную ошибки
- System.out.println("\nАбсолютная ошибка А = " + Math.abs(c1-c12) + "\nОтносительная ошибка (10 знаков) = " + (float)Math.rint((Math.abs(c1-c12)/c1)*10000000000f)/10000000000f);
- //для чисел типа float в java Это слишком большая точность, числа считаются идентичными
- // Умножение ошибки
- z1 = x1 + 0.00000001f; // ошибка в младшем разряде 8 знаков после запятой
- System.out.println("\n======== Ошибка Умножения ========\nЗначение x с ошибкой: z = " + z1); // выводим значение x с ошибкой
- m11 = x1*x1;
- System.out.println("\nУмножение без ошибки m = x * x = " + m11 ); //умножение без ошибки
- m12 = x1*z1;
- System.out.println("\nУмножение с ошибкой n = x * z = " + m12 ); //умножение без ошибки
- // посчитаем абсолютную и относительную ошибки
- System.out.println("\nАбсолютная ошибка А = " + Math.abs(m11 - m12) + "\nОтносительная ошибка (10 знаков) = " + (float)Math.rint((Math.abs(m11-m12)/x1)*10000000000f)/10000000000f);
- //для чисел типа float в java Это слишком большая точность, числа считаются идентичными
- //Потеря значимости
- k1 = (float)Math.rint(x1); // округление x до целого
- System.out.println("\n======== Потеря значимости ========\nОкругление x до целого: k = " + k1);
- System.out.println("\nАбсолютная ошибка А = " + Math.abs(x1 - k1) + "\nОтносительная ошибка (10 знаков) = " + (float)Math.rint((Math.abs(x1-k1)/x1)*10000000000f)/10000000000f);
- // Проверка для double типа
- // Исчезновение наименее значимого операнда
- System.out.println("\n\n======== Ошибки для типа double ======== \n");
- y2 = x2*0.0000000001d; // из задания
- System.out.println("x = " + x2 + "\ny = " + y2); // выводим x и y
- c2 = x2 + y2; // здесь исчезновение операнда произойдёт частично, тк у double большая точность
- System.out.println("\n======== Ошибка Исчезновения Операнда ========\nc = x + y = " + c2); // выводим сумму c = x+y
- c22 = Math.rint(c2*1000000000d) / 1000000000d; //округляем с точностью до 9 знаков
- System.out.println("\nc' (округ. до 9 знаков)= " + c22); //выводим предыдущий результат округления
- // посчитаем абсолютную и относительную ошибки
- System.out.println("\nАбсолютная ошибка А = " + Math.abs(c2-c22) + "\nОтносительная ошибка (10 знаков) = " + Math.rint((Math.abs(c2-c22)/c2)*10000000000d)/10000000000d);
- //для чисел типа float в java Это слишком большая точность, числа считаются идентичными
- // Умножение ошибки
- z2 = x2 + 0.00000001d; // ошибка в младшем разряде 8 знаков после запятой
- System.out.println("\n======== Ошибка Умножения ========\nЗначение x с ошибкой: z = " + z2); // выводим значение x с ошибкой
- m21 = x2*x2;
- System.out.println("\nУмножение без ошибки m = x * x = " + m21 ); //умножение без ошибки
- m22 = x2*z2;
- System.out.println("\nУмножение с ошибкой n = x * z = " + m22 ); //умножение с ошибкой
- // посчитаем абсолютную и относительную ошибки
- System.out.println("\nАбсолютная ошибка А = " + Math.abs(m21 - m22) + "\nОтносительная ошибка (10 знаков) = " + Math.rint((Math.abs(m21-m22)/x2)*10000000000d)/10000000000d);
- //Происходит поглощение наиболее маленького операнда и числа остаются идентичными
- //Потеря значимости
- k2 = Math.rint(x2); // округление x до целого
- System.out.println("\n======== Потеря значимости ========\nОкругление x до целого: k = " + k1);
- System.out.println("\nАбсолютная ошибка А = " + Math.abs(x2 - k2) + "\nОтносительная ошибка (10 знаков) = " + Math.rint((Math.abs(x2-k2)/x2)*10000000000d)/10000000000d);
- }
- public static void main(String[] args){
- Pogreshnost check = new Pogreshnost();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement