Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Почему так? / 11 сообщений из 11, страница 1 из 1
17.08.2007, 16:52:57
    #34735409
Почему так?
Почему если так, то точность теряется при приведении типов:
Код: plaintext
1.
2.
3.
4.
5.
 long  a = 98765432112345678L;
 float  f = a;      //неявное приведение long к float
 long  b = ( long ) f;   // явное приведение

System.out.println(b);  //выводит значение, меньшее чем a, так как преобразование исказило результат

а если так:
Код: plaintext
1.
2.
3.
4.
5.
 long  a =  Long .MAX_VALUE;
 float  f = a;      //неявное приведение long к float
 long  b = ( long ) f;   // явное приведение

System.out.println(b);  //выводит тоже самое значение, что и было в a
...
Рейтинг: 0 / 0
17.08.2007, 16:53:48
    #34735413
Почему так?
Во втором варианте значение не исказилось...
...
Рейтинг: 0 / 0
17.08.2007, 17:04:14
    #34735454
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему так?
Потому что 98765432112345678L > Long.MAX_VALUE
...
Рейтинг: 0 / 0
17.08.2007, 17:06:09
    #34735469
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему так?
хотя нет. ашипся.
...
Рейтинг: 0 / 0
17.08.2007, 17:07:33
    #34735479
vas0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему так?
просто какие то значения можно точно апроксимировать, а какие то нельзя без потери точности
...
Рейтинг: 0 / 0
17.08.2007, 17:15:13
    #34735524
Хрюхрюшкин.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему так?
Хыдыщ.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
        DecimalFormat dformat =  new  DecimalFormat("00000000000000000");
        
        {            
            System.out.println("VALUE = 98765432112345678L");
            
             long  a = 98765432112345678L;
             float  f = a; //неявное приведение long к float
             long  b = ( long ) f; // явное приведение
            
            System.out.println("a = " + a);
            System.out.println("b = " + b);
            System.out.println("f = " + dformat.format(f));
        }
        
        {            
            System.out.println("VALUE = Long.MAX_VALUE");

             long  a =  Long .MAX_VALUE;
             float  f = a; //неявное приведение long к float
             long  b = ( long ) f; // явное приведение

            System.out.println("a = " + a);
            System.out.println("b = " + b);
            System.out.println("f = " + dformat.format(f));
        }

Объяснять подробнее?
...
Рейтинг: 0 / 0
18.08.2007, 01:40:55
    #34736148
Primax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему так?
Хрюхрюшкин
Если можно )
...
Рейтинг: 0 / 0
18.08.2007, 02:22:23
    #34736152
Хрюхрюшкин.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему так?
Primax Хрюхрюшкин
Если можно )

Надеюсь, вы выполнили пример и увидели на экране такие цифры:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
VALUE = 98765432112345678L
a =  98765432112345678 
b =  98765435851243520 
f =  98765435851243520 
VALUE =  Long .MAX_VALUE
a =  9223372036854775807 
b =  9223372036854775807 
f =  9223372036854776000 


Вы должны были заметить, что строго говоря, float ни в одном, ни в другом случае, не содержал правильного значения переменной "a" до мантиссы.
Почему же во втором случае мы получили правильный результат?

А ты напиши
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
        {
            System.out.println("VALUE = Long.MAX_VALUE");

             long  a =  Long .MAX_VALUE -  20 ;
             float  f = a; //неявное приведение long к float
             long  b = ( long ) f; // явное приведение

            System.out.println("a = " + a);
            System.out.println("b = " + b);
            System.out.println("f = " + dformat.format(f));
        }


Посмейся и вспомни, как хранится число float в памяти.
...
Рейтинг: 0 / 0
18.08.2007, 02:38:06
    #34736154
Primax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему так?
Хрюхрюшкин.Посмейся и вспомни, как хранится число float в памяти.
да в том и проблема, что не нахожу поводов для смеха т.к. не понимаю в чем ошибка была в первом случае...
...
Рейтинг: 0 / 0
18.08.2007, 02:49:22
    #34736155
Хрюхрюшкин.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему так?
Primax
да в том и проблема, что не нахожу поводов для смеха т.к. не понимаю в чем ошибка была в первом случае...
Ну тогда кури, блин, документацию . Это, кстати, полезно время от времени делать и запросто так.
...
Рейтинг: 0 / 0
18.08.2007, 02:50:37
    #34736156
Хрюхрюшкин.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему так?
Чуть выше описание и Widening Primitive Conversion
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Почему так? / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]