|
Основной форум Сюда все проблемы связанные с программированием. |
23.10.2009, 00:10
|
#1
|
Нуждающийся
Регистрация: 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
|
Модератор
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений (для 817 пользователей)
|
Ответ: Проблемы с real
Попробуй использовать Lib_dbl
|
(Offline)
|
|
23.10.2009, 00:36
|
#3
|
Нуждающийся
Регистрация: 28.09.2008
Сообщений: 98
Написано одно полезное сообщение
|
Ответ: Проблемы с real
Не совсем понимаю, как либа мне поможет с делением.
|
(Offline)
|
|
23.10.2009, 00:38
|
#4
|
Модератор
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений (для 817 пользователей)
|
Ответ: Проблемы с real
Я сам ей не пользовался, но она работает с типом double, поэтому ошибок в вычислениях быть не должно. Хотя непонятно, почему real выдает такую ошибку.
|
(Offline)
|
|
23.10.2009, 00:46
|
#5
|
Нуждающийся
Регистрация: 28.09.2008
Сообщений: 98
Написано одно полезное сообщение
|
Ответ: Проблемы с real
Я не нахожу в этой либе именно деления дробных чисел.
|
(Offline)
|
|
23.10.2009, 00:53
|
#6
|
Модератор
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений (для 817 пользователей)
|
Ответ: Проблемы с real
Нужно использовать функцию div.
|
(Offline)
|
|
23.10.2009, 01:22
|
#7
|
Нуждающийся
Регистрация: 28.09.2008
Сообщений: 98
Написано одно полезное сообщение
|
Ответ: Проблемы с real
Я нуб. Не понимаю как правильно использовать либу.
dbl.div (4-6, 5) ??
|
(Offline)
|
|
23.10.2009, 01:31
|
#8
|
ПроЭктировщик
Регистрация: 31.01.2007
Сообщений: 128
Написано 20 полезных сообщений (для 43 пользователей)
|
Ответ: Проблемы с real
Сообщение от Winner
Эмулятор выдает следующий результат: 0.0000
По калькулятору (да и в уме) ответ получается -0.4.
С этим сталкиваюсь уже не первый раз.
|
А какой режим компиляции? fixed или floating point? (если версия русифицирована, то какая "погрешность"?)
|
(Offline)
|
|
23.10.2009, 01:49
|
#9
|
Нуждающийся
Регистрация: 28.09.2008
Сообщений: 98
Написано одно полезное сообщение
|
Ответ: Проблемы с real
fixed, во floating вообще ничего не выдает, версия английская 2.02
|
(Offline)
|
|
23.10.2009, 13:50
|
#10
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Ответ: Проблемы с real
При вычислениях лучше указывать дробную часть, даже если она нулевая.
Тогда телефон воспримет эти числа как вещественные и вычисления будут верные,
а в данном случае телефон думает, что используются целые числа типа Integer,
считает по принципам счета с целыми числами и результат потом приводит к вещественному числу.
Для того, чтобы ваш пример нормально работал нужно только немного исправить его:
Program math;
var x:real;
begin x:=(4.0-6.0)/5.0; DrawText (''+x, 5, 5); repaint; Delay(5000); end.
|
(Offline)
|
|
23.10.2009, 14:28
|
#11
|
Нуждающийся
Регистрация: 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
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Ответ: Проблемы с real
А ты их умножай на real константу со значением 1.0.
Типа так:
x, one: real; a, b, c: integer; begin one:=1.0; a:=4; b:=6; c:=5; x:=(a*one-b*one)/(c*one); end.
|
(Offline)
|
|
24.10.2009, 00:41
|
#13
|
Нуждающийся
Регистрация: 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)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 11:09.
|