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

Вниз

Почему срабатывает условие   Найти похожие ветки 

 
NaZGHUL   (2003-06-10 11:43) [0]

Ребята помогите:
...
var a,b:real;
i:integer;
...
for i:=1 to ... do
if A[i] > B then ...;
...

У меня почему то срабатывает условие при A=B, если А и В - дробное число, причем если А и В целые числа и А=В не срабатывает что делать...............Help!!!


 
Palladin ©   (2003-06-10 11:46) [1]

замени real на currency и не мучайся


 
NaZGHUL   (2003-06-10 11:55) [2]

Все конечно гораздо сложнее - это сильно оочень сильно упрощенная модель, переделывать весь код влом - дело принципа: почему такая фигня происходит!!!!! Я пишу экспертную систему для машиностроения и дороги любые 0,001 мм. Прикольно другое условие срабатывает если 10,94 > 10,939999999999999!!!!


 
Sandman25 ©   (2003-06-10 11:59) [3]

Переведите все в условные единицы измерения. То есть 1ед. = 0.001мм


 
NaZGHUL   (2003-06-10 12:18) [4]

Ну поему такая фигня происходит то!!!!!???????????? 8-(


 
Катерина ©   (2003-06-10 12:22) [5]

const eps = 0.001;
...
if abs(a-b) < eps then
... // A = B
else if a > b then
... // A > B
else
... // A < B


 
Катерина ©   (2003-06-10 12:38) [6]

Для значений вещественных типов (кроме Comp, Currency), т.е. имеющих дробную часть нефиксированной длины, A = B практически никогда не будет истинным, поскольку таким образом (real и т.д.)определяются числа с некоторой точностью. И соответственно сравнение этих чисел надобно производить с необходимой точностью.


 
icWasya ©   (2003-06-10 13:03) [7]

из справки
Type Range Significant digits Size in bytes
Real48 2.9 x 10^–39 .. 1.7 x 10^38 11–12 6
Single 1.5 x 10^–45 .. 3.4 x 10^38 7–8 4
Double 5.0 x 10^–324 .. 1.7 x 10^308 15–16 8
Extended 3.6 x 10^–4951 .. 1.1 x 10^4932 19–20 10
Comp –2^63+1 .. 2^63 –1 19–20 8
Currency –922337203685477.5808.. 922337203685477.5807 19–20 8
The generic type Real, in its current implementation, is equivalent to Double.


разница между 10,94 и 10,939999999999999 ~ 1e-15 , что на пределе точности


 
Юрий Зотов ©   (2003-06-10 13:21) [8]

> NaZGHUL
Правильные и подробные ответы на все вопросы Вы найдете здесь:
http://www.delphikingdom.ru/helloworld/reals.htm


 
NaZGHUL   (2003-06-10 13:22) [9]

Сенки всем!!! :)))


 
Song ©   (2003-06-10 15:17) [10]

IF FloatToStr(A)=FloatToStr(B) then...

:)


 
АСВГ   (2003-06-10 16:19) [11]

Народ а как насчет переопределения оператора равно и сравнение через него?
Ну это если нужна определенная точность.



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

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

Наверх




Память: 0.49 MB
Время: 0.017 c
14-84577
Sam
2003-06-07 19:35
2003.06.26
Hosting for Delphi


8-84468
CD
2003-03-07 13:23
2003.06.26
Загрузка .jpg в image


3-83883
needle
2003-06-02 14:56
2003.06.26
Получение значения редактируемого поля в DBGrid


3-83992
koks
2003-05-29 11:30
2003.06.26
эксклюзтвный доступ в dbf...... проблема


6-84474
Юлия
2003-04-20 23:13
2003.06.26
Internet-приложения