Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.08.17;
Скачать: CL | DM;

Вниз

"Ничего не понимаю" - java не умеет считать или я?   Найти похожие ветки 

 
Kostafey ©   (2008-07-01 18:47) [0]

Толи я сошел с ума, то ли мой комп, но:

public class HellowCalc
{
   public static void main(String [] args)
   {
       double x = 0.0;
       do {
           System.out.println("x = " + x);
           x += 0.1;
           if (x>1) break;
       } while(true);
   }
}


E:\Temp\C>javac HellowCalc.java

E:\Temp\C>java HellowCalc
x = 0.0
x = 0.1
x = 0.2
x = 0.30000000000000004
x = 0.4
x = 0.5
x = 0.6
x = 0.7
x = 0.7999999999999999
x = 0.8999999999999999
x = 0.9999999999999999

меняю
double x = 0.0;
на
float x = 0;

получаем:
x = 0.0
x = 0.1
x = 0.2
x = 0.3
x = 0.4
x = 0.5
x = 0.6
x = 0.70000005
x = 0.8000001
x = 0.9000001


 
Плохиш ©   (2008-07-01 18:51) [1]


> Kostafey ©   (01.07.08 18:47)  

И в чём проблема?


 
Правильный-Вася   (2008-07-01 18:52) [2]

0.1 в разных случаях разного типа


 
Renegat   (2008-07-01 18:53) [3]

А как вы считаете, представима ли одна десятая конечной двоичной дробью?


 
Kostafey ©   (2008-07-01 18:53) [4]

> [1] Плохиш ©   (01.07.08 18:51)
> > Kostafey ©   (01.07.08 18:47)  
> И в чём проблема?

Дык хвосты эти откуда?
Я ожидал просто
x = 0.0
x = 0.1
x = 0.2
x = 0.3
x = 0.4
x = 0.5
x = 0.6
x = 0.7
x = 0.8
x = 0.9

А в более сложных вычислениях в нескольких циклах
вообще все плавать будет...


 
Плохиш ©   (2008-07-01 18:55) [5]


> Kostafey ©   (01.07.08 18:53) [4]
> Дык хвосты эти откуда?
> Я ожидал просто

Строит прочитать про вещественные числа и хранение их в двоичном виде...


 
Kostafey ©   (2008-07-01 18:55) [6]

> [1] Плохиш ©   (01.07.08 18:51)

В первом случае цикл вообще выполнил на 1 итерацию
больше чем ожидалось!


 
Anatoly Podgoretsky ©   (2008-07-01 18:56) [7]

> Kostafey  (01.07.2008 18:47:00)  [0]

Еще один, который не знает как работают числа с плавающей запятой.


 
Kostafey ©   (2008-07-01 18:56) [8]

> [5] Плохиш ©   (01.07.08 18:55)
> Строит прочитать про вещественные числа и хранение их в
> двоичном виде...

Теперь, похоже придется.
С чего начать?


 
Kostafey ©   (2008-07-01 18:57) [9]

> [7] Anatoly Podgoretsky ©   (01.07.08 18:56)
> > Kostafey  (01.07.2008 18:47:00)  [0]
>
> Еще один, который не знает как работают числа с плавающей
> запятой.

А как проблема решается?


 
Плохиш ©   (2008-07-01 18:58) [10]


> Kostafey ©   (01.07.08 18:55) [6]
> > [1] Плохиш ©   (01.07.08 18:51)
>
> В первом случае цикл вообще выполнил на 1 итерацию
> больше чем ожидалось!

Тогда уж, во втором на одну меньше, чем ожидалось. На условие окончание внимательно посмотри.

> С чего начать?

А ссылку придётся в качестве самостоятельной работы поискать.


 
pasha_golub ©   (2008-07-01 18:59) [11]


> Kostafey ©   (01.07.08 18:57) [9]
>
> > [7] Anatoly Podgoretsky ©   (01.07.08

Храни в целых числах, при выводе юзеру дели на нужное число. :)


 
Kostafey ©   (2008-07-01 19:00) [12]

> Тогда уж, во втором на одну меньше, чем ожидалось. На условие
> окончание внимательно посмотри.

Да точно.


> А ссылку придётся в качестве самостоятельной работы поискать.

Эта проблема вообще решается.
Ну в смысле найду я атериал про хранение чисел.
Это позволит корректно решить задачу?


 
Плохиш ©   (2008-07-01 19:01) [13]

Кстати, я не понял, а что по ентой крутейшей джаве даже форумов нет? 8-O
Во, левая пародия :-))


 
Kostafey ©   (2008-07-01 19:01) [14]

> [11] pasha_golub ©   (01.07.08 18:59)
>
> > Kostafey ©   (01.07.08 18:57) [9]
> >
> > > [7] Anatoly Podgoretsky ©   (01.07.08
>
> Храни в целых числах, при выводе юзеру дели на нужное число.
> :)

А это мысль...


 
Kostafey ©   (2008-07-01 19:02) [15]

> [13] Плохиш ©   (01.07.08 19:01)
> Кстати, я не понял, а что по ентой крутейшей джаве даже
> форумов нет? 8-O

Кудаж без них. Есть.


 
Anatoly Podgoretsky ©   (2008-07-01 19:09) [16]

> Kostafey  (01.07.2008 18:56:08)  [8]

Иди на Королевство, ищи что то подобное "Неявные осовбенности вещественных чисел".
Для твоей задачи нужны числа с фиксированой точностью, ака BCD
или работа с целыми и форматирование, при котором снова нарвешься на особенности.
Тебе не повезло, что у тебя число 0,1 таких чисел просто нет.


 
Kostafey ©   (2008-07-01 19:15) [17]

> [16] Anatoly Podgoretsky ©   (01.07.08 19:09)

Ясно. Списибо.

Кстати,

> [11] pasha_golub ©   (01.07.08 18:59)
> Храни в целых числах, при выводе юзеру дели на нужное число.
> :)

помогло.


 
Anatoly Podgoretsky ©   (2008-07-01 19:18) [18]

Это ты погорячился и очень. После деления получаешь снова вещестственное и снова ошибку.
Поищи нет ли в Яве BCD или хотя бы Currency/Money


 
iZEN   (2008-07-01 19:28) [19]

О боже, не надо таким Java.


 
Kostafey ©   (2008-07-01 20:06) [20]

> [19] iZEN   (01.07.08 19:28)

И это вместо конструктивного совета?
:)


 
Юрий Зотов ©   (2008-07-01 21:03) [21]

> Kostafey ©   (01.07.08 18:47)

http://www.delphikingdom.com/asp/viewitem.asp?catalogid=374

Компьютер работает не в десятичной, а в двоичной системе, вот и весь фокус. И никакие Java, Delphi или C здесь абсолютно ни при чем.


 
Zeqfreed ©   (2008-07-01 21:09) [22]

Блин, ну ваще-е-е.
В программе вы работаете с числами как они есть. А при любом выводе пользователю будьте любезны использовать функции форматирования, дабы не наткнуться на такие вот неожиданности.

Набираем в Фаерфоксе "java float format", тычем энтер и лицезреем:
http://java.sun.com/j2se/1.5.0/docs/api/java/util/Formatter.html


 
Anatoly Podgoretsky ©   (2008-07-01 23:00) [23]

> Zeqfreed  (01.07.2008 21:09:22)  [22]

О каком форматирование речь, когда у него расчеты не идут, даже количество иттераций разное.


 
Marser ©   (2008-07-01 23:10) [24]

Вот так и появляются явоненавистники :-))

"Это лишний раз доказывает, что дельфя гиморрой" (с) классика Орешника :-))


> iZEN   (01.07.08 19:28) [19]
>
> О боже, не надо таким Java.

А воспитать? ;-)


 
Zeqfreed ©   (2008-07-01 23:12) [25]

> Anatoly Podgoretsky ©   (01.07.08 23:00) [23]

Ну и сравнение тоже надо делать правильно. Это да :)


 
Anatoly Podgoretsky ©   (2008-07-01 23:44) [26]

> Zeqfreed  (01.07.2008 23:12:25)  [25]

Именно так и поэтому ему повезло, что не написал if (x=1) break; а я встречал и такое :-)



Страницы: 1 вся ветка

Текущий архив: 2008.08.17;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.019 c
2-1215772186
Виктор
2008-07-11 14:29
2008.08.17
Как разархивировать файл?


15-1214862362
Petr V. Abramov
2008-07-01 01:46
2008.08.17
Софт - отстой.


15-1214980351
Dennis I. Komarov
2008-07-02 10:32
2008.08.17
WiFi P2P У кого есть опыт?


2-1215970748
Alexey
2008-07-13 21:39
2008.08.17
Ссылка на элемент формы по его имени


2-1215684594
Query
2008-07-10 14:09
2008.08.17
Query