Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > MidletPascal > Основной форум

Основной форум Сюда все проблемы связанные с программированием.

Ответ
 
Опции темы
Старый 23.10.2009, 00:10   #1
Winner
Нуждающийся
 
Регистрация: 28.09.2008
Сообщений: 98
Написано одно полезное сообщение
Проблемы с real

Маленький пример:

var x:real;

begin
x:=(4-6)/5;
DrawText (''+x, 5, 5);

repaint;
Delay(5000);
end.

Эмулятор выдает следующий результат: 0.0000
По калькулятору (да и в уме) ответ получается -0.4.
С этим сталкиваюсь уже не первый раз.

Кто знает, объясните, почему так, и как с этим бороться. Поиском нужного ответа не нашел. Если такая тема уже есть на форуме, скиньте ссылку. Буду очень благодарен.
(Offline)
 
Ответить с цитированием
Старый 23.10.2009, 00:31   #2
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: Проблемы с real

Попробуй использовать Lib_dbl
(Offline)
 
Ответить с цитированием
Старый 23.10.2009, 00:36   #3
Winner
Нуждающийся
 
Регистрация: 28.09.2008
Сообщений: 98
Написано одно полезное сообщение
Ответ: Проблемы с real

Не совсем понимаю, как либа мне поможет с делением.
(Offline)
 
Ответить с цитированием
Старый 23.10.2009, 00:38   #4
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: Проблемы с real

Я сам ей не пользовался, но она работает с типом double, поэтому ошибок в вычислениях быть не должно. Хотя непонятно, почему real выдает такую ошибку.
(Offline)
 
Ответить с цитированием
Старый 23.10.2009, 00:46   #5
Winner
Нуждающийся
 
Регистрация: 28.09.2008
Сообщений: 98
Написано одно полезное сообщение
Ответ: Проблемы с real

Я не нахожу в этой либе именно деления дробных чисел.
(Offline)
 
Ответить с цитированием
Старый 23.10.2009, 00:53   #6
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: Проблемы с real

Нужно использовать функцию div.
(Offline)
 
Ответить с цитированием
Старый 23.10.2009, 01:22   #7
Winner
Нуждающийся
 
Регистрация: 28.09.2008
Сообщений: 98
Написано одно полезное сообщение
Ответ: Проблемы с real

Я нуб. Не понимаю как правильно использовать либу.

dbl.div (4-6, 5) ??
(Offline)
 
Ответить с цитированием
Старый 23.10.2009, 01:31   #8
Bruteo
ПроЭктировщик
 
Регистрация: 31.01.2007
Сообщений: 128
Написано 20 полезных сообщений
(для 43 пользователей)
Ответ: Проблемы с real

Сообщение от Winner Посмотреть сообщение
Эмулятор выдает следующий результат: 0.0000
По калькулятору (да и в уме) ответ получается -0.4.
С этим сталкиваюсь уже не первый раз.
А какой режим компиляции? fixed или floating point? (если версия русифицирована, то какая "погрешность"?)
(Offline)
 
Ответить с цитированием
Старый 23.10.2009, 01:49   #9
Winner
Нуждающийся
 
Регистрация: 28.09.2008
Сообщений: 98
Написано одно полезное сообщение
Ответ: Проблемы с real

fixed, во floating вообще ничего не выдает, версия английская 2.02
(Offline)
 
Ответить с цитированием
Старый 23.10.2009, 13:50   #10
odd
Мастер
 
Аватар для odd
 
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений
(для 713 пользователей)
Ответ: Проблемы с real

При вычислениях лучше указывать дробную часть, даже если она нулевая.
Тогда телефон воспримет эти числа как вещественные и вычисления будут верные,
а в данном случае телефон думает, что используются целые числа типа Integer,
считает по принципам счета с целыми числами и результат потом приводит к вещественному числу.
Для того, чтобы ваш пример нормально работал нужно только немного исправить его:

Program math;

var 
x:real;

begin
x
:=(4.0-6.0)/5.0;
DrawText (''+x55);
repaint;
Delay(5000);
end
(Offline)
 
Ответить с цитированием
Старый 23.10.2009, 14:28   #11
Winner
Нуждающийся
 
Регистрация: 28.09.2008
Сообщений: 98
Написано одно полезное сообщение
Ответ: Проблемы с real

А как быть с переменными типа integer?

Пример:
x:real;
a, b, c:integer;
begin
a:=4; b:=6; c:=5;
x:=(a-b)/c;
end.
(Offline)
 
Ответить с цитированием
Старый 24.10.2009, 00:29   #12
odd
Мастер
 
Аватар для odd
 
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений
(для 713 пользователей)
Ответ: Проблемы с real

А ты их умножай на real константу со значением 1.0.
Типа так:

xonereal;
abcinteger;
begin
one
:=1.0;
a:=4b:=6c:=5;
x:=(a*one-b*one)/(c*one);
end
(Offline)
 
Ответить с цитированием
Старый 24.10.2009, 00:41   #13
Winner
Нуждающийся
 
Регистрация: 28.09.2008
Сообщений: 98
Написано одно полезное сообщение
Ответ: Проблемы с real

Я сделал так:

x, y :real
a, b, c:integer;
begin
a:=4; b:=6; c:=5;
y:=c;
x:=(a-b)/y;
end.


Т.е. сначала перевел делитель в real и потом выполнил вычисления. Вроде, работает.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с дробями, типом real и т.д.... VotapilD Основной форум 8 08.12.2009 12:56
Неправильно считает в real Winner BugTracker 0 05.11.2009 01:00
real-time изменение image Taugeshtu 2D-программирование 4 29.02.2008 16:44
Real Time 3D Terrain Engines Using C++ And DirectX 9 [Eng] johnk C++ 4 28.11.2007 14:58
Real-ный вопрос triton Основной форум 3 04.10.2007 19:43


Часовой пояс GMT +4, время: 18:06.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com