Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.11.2010, 18:37   #1
JokerWCC
Пользователь
 
Регистрация: 10.10.2010
Сообщений: 18
По умолчанию Java

простая програмка, но результат не верный (рассчеты проведенные java)

программа:

package laba2floats;

public class Main {

public static void main(String[] args) {
float a=1000;
float b= 0.0001F;
float c=(a+b)*(a+b);
float d=(a*a+2*a*b);
float e=c-d;
float f=b*b;
float result=e/f;
System.out.println(result);
System.out.println(c);
System.out.println(d);
System.out.println(e);
System.out.println(f);
}

}


а вот какие результаты выдает JDK:

6250000.5
1000000.25
1000000.2
0.0625
9.999999E-9


Где ошибка???????
JokerWCC вне форума Ответить с цитированием
Старый 28.11.2010, 18:39   #2
andrewpalkin
Форумчанин
 
Аватар для andrewpalkin
 
Регистрация: 23.11.2010
Сообщений: 458
По умолчанию

Цитата:
Сообщение от JokerWCC Посмотреть сообщение
простая програмка, но результат не верный (рассчеты проведенные java)

программа:

package laba2floats;

public class Main {

public static void main(String[] args) {
float a=1000;
float b= 0.0001F;
float c=(a+b)*(a+b);
float d=(a*a+2*a*b);
float e=c-d;
float f=b*b;
float result=e/f;
System.out.println(result);
System.out.println(c);
System.out.println(d);
System.out.println(e);
System.out.println(f);
}

}


а вот какие результаты выдает JDK:

6250000.5
1000000.25
1000000.2
0.0625
9.999999E-9


Где ошибка???????
Это конечно хороший вопрос . а какие вообще результаты должны быть
--- Если я вам помог , то помогите и вы мне . Не просто просите решить задачу , а пробуйте ее сами решить ! Я не пишу программы с нуля , я помогаю поправить код ! ---
andrewpalkin вне форума Ответить с цитированием
Старый 28.11.2010, 18:45   #3
JokerWCC
Пользователь
 
Регистрация: 10.10.2010
Сообщений: 18
По умолчанию

c - неверное.... можно посмотреть как он e вычислил:

1000000.25-1000000.2=0.0625 - как????
вообще почти все вычисления не верные.....
JokerWCC вне форума Ответить с цитированием
Старый 28.11.2010, 18:51   #4
andrewpalkin
Форумчанин
 
Аватар для andrewpalkin
 
Регистрация: 23.11.2010
Сообщений: 458
По умолчанию

Цитата:
Сообщение от JokerWCC Посмотреть сообщение
c - неверное.... можно посмотреть как он e вычислил:

1000000.25-1000000.2=0.0625 - как????
вообще почти все вычисления не верные.....
Он числа округляет , вот и получается , что вычисления не верные .
--- Если я вам помог , то помогите и вы мне . Не просто просите решить задачу , а пробуйте ее сами решить ! Я не пишу программы с нуля , я помогаю поправить код ! ---
andrewpalkin вне форума Ответить с цитированием
Старый 28.11.2010, 18:52   #5
JokerWCC
Пользователь
 
Регистрация: 10.10.2010
Сообщений: 18
По умолчанию

такого округления просто не может быть)))))

как это он 0.05 округлил в 0.0625?)))

тут что-то не то.....
JokerWCC вне форума Ответить с цитированием
Старый 28.11.2010, 18:58   #6
andrewpalkin
Форумчанин
 
Аватар для andrewpalkin
 
Регистрация: 23.11.2010
Сообщений: 458
По умолчанию

Цитата:
Сообщение от JokerWCC Посмотреть сообщение
такого округления просто не может быть)))))

как это он 0.05 округлил в 0.0625?)))

тут что-то не то.....
Он не только конечный результат округляет , он еще и раньше делает это .
--- Если я вам помог , то помогите и вы мне . Не просто просите решить задачу , а пробуйте ее сами решить ! Я не пишу программы с нуля , я помогаю поправить код ! ---
andrewpalkin вне форума Ответить с цитированием
Старый 28.11.2010, 19:05   #7
andrewpalkin
Форумчанин
 
Аватар для andrewpalkin
 
Регистрация: 23.11.2010
Сообщений: 458
По умолчанию

ты можешь поменять вот на это , он будет работать лучше

Код:
                double a=1000;
		double b= 0.0001F;
		double c=(a+b)*(a+b);
		double d=(a*a+2*a*b);
		double e=c-d;
		double f=b*b;
		double result=e/f;
		System.out.println(result);
		System.out.println(c);
		System.out.println(d);
		System.out.println(e);
		System.out.println(f);
--- Если я вам помог , то помогите и вы мне . Не просто просите решить задачу , а пробуйте ее сами решить ! Я не пишу программы с нуля , я помогаю поправить код ! ---
andrewpalkin вне форума Ответить с цитированием
Старый 28.11.2010, 19:06   #8
andrewpalkin
Форумчанин
 
Аватар для andrewpalkin
 
Регистрация: 23.11.2010
Сообщений: 458
По умолчанию

Такие точные вычисления никогда не делаются так просто , в любом языке программирования
--- Если я вам помог , то помогите и вы мне . Не просто просите решить задачу , а пробуйте ее сами решить ! Я не пишу программы с нуля , я помогаю поправить код ! ---
andrewpalkin вне форума Ответить с цитированием
Старый 28.11.2010, 19:08   #9
JokerWCC
Пользователь
 
Регистрация: 10.10.2010
Сообщений: 18
По умолчанию

то-то и оно, что в double правильно считает...... у меня задание посчитать в float и сравнить с double.... из-за более маленькой точности в float должен получаться ноль, но получается бред какой-то.....на C проверил все отлично работает, а JDK подводит..... наверно где-то глупая ошибка....
JokerWCC вне форума Ответить с цитированием
Старый 28.11.2010, 19:10   #10
andrewpalkin
Форумчанин
 
Аватар для andrewpalkin
 
Регистрация: 23.11.2010
Сообщений: 458
По умолчанию

Цитата:
Сообщение от JokerWCC Посмотреть сообщение
то-то и оно, что в double правильно считает...... у меня задание посчитать в float и сравнить с double.... из-за более маленькой точности в float должен получаться ноль, но получается бред какой-то.....на C проверил все отлично работает, а JDK подводит..... наверно где-то глупая ошибка....
double тоже считает не правильно , ты проверь на простом калькуляторе . Тот же c= 1000000.20000001 . А у тебя другое число будет выдавать
--- Если я вам помог , то помогите и вы мне . Не просто просите решить задачу , а пробуйте ее сами решить ! Я не пишу программы с нуля , я помогаю поправить код ! ---
andrewpalkin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
чтение файла в массив строк java (Перенесено из Java SE) Sasha9132 Помощь студентам 0 18.11.2010 22:57
Помогите справиться с java.lang.OutOfMemoryError: Java heap space Levilaulada Помощь студентам 1 17.05.2009 10:59