forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Основной форум (http://forum.boolean.name/forumdisplay.php?f=49)
-   -   Проблемы с real (http://forum.boolean.name/showthread.php?t=9570)

Winner 23.10.2009 00:10

Проблемы с real
 
Маленький пример:

var x:real;

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

repaint;
Delay(5000);
end.

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

Кто знает, объясните, почему так, и как с этим бороться. Поиском нужного ответа не нашел. Если такая тема уже есть на форуме, скиньте ссылку. Буду очень благодарен.

ViNT 23.10.2009 00:31

Ответ: Проблемы с real
 
Попробуй использовать Lib_dbl

Winner 23.10.2009 00:36

Ответ: Проблемы с real
 
Не совсем понимаю, как либа мне поможет с делением.

ViNT 23.10.2009 00:38

Ответ: Проблемы с real
 
Я сам ей не пользовался, но она работает с типом double, поэтому ошибок в вычислениях быть не должно. Хотя непонятно, почему real выдает такую ошибку.

Winner 23.10.2009 00:46

Ответ: Проблемы с real
 
Я не нахожу в этой либе именно деления дробных чисел.

ViNT 23.10.2009 00:53

Ответ: Проблемы с real
 
Нужно использовать функцию div.

Winner 23.10.2009 01:22

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

dbl.div (4-6, 5) ??

Bruteo 23.10.2009 01:31

Ответ: Проблемы с real
 
Цитата:

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

А какой режим компиляции? fixed или floating point? (если версия русифицирована, то какая "погрешность"?)

Winner 23.10.2009 01:49

Ответ: Проблемы с real
 
fixed, во floating вообще ничего не выдает, версия английская 2.02

odd 23.10.2009 13:50

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

PHP код:

Program math;

var 
x:real;

begin
x
:=(4.0-6.0)/5.0;
DrawText (''+x55);
repaint;
Delay(5000);
end


Winner 23.10.2009 14:28

Ответ: Проблемы с real
 
А как быть с переменными типа integer?

Пример:
x:real;
a, b, c:integer;
begin
a:=4; b:=6; c:=5;
x:=(a-b)/c;
end.

odd 24.10.2009 00:29

Ответ: Проблемы с real
 
А ты их умножай на real константу со значением 1.0.
Типа так:

PHP код:

xonereal;
abcinteger;
begin
one
:=1.0;
a:=4b:=6c:=5;
x:=(a*one-b*one)/(c*one);
end


Winner 24.10.2009 00:41

Ответ: Проблемы с real
 
Я сделал так:

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


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


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot