Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.06.26;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.036 c
11-84058
Garrison
2002-08-21 14:08
2003.06.26
Хочу :))


3-83975
PIV
2003-05-24 22:35
2003.06.26
Базы данных


1-84203
NickName
2003-06-12 13:56
2003.06.26
Сброс фокус Memo


14-84761
Shluz
2003-06-06 00:29
2003.06.26
SMS сообщения


14-84560
Начинающий шароварщик
2003-05-28 16:55
2003.06.26
Shareware - за и против





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский