Главная страница
    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.022 c
14-84679
Soft
2003-06-10 17:00
2003.06.26
Мысли о мышлении программистов


1-84398
TSa
2003-06-06 21:32
2003.06.26
Глюк в Win2000 при открытии файла


3-83946
basil
2003-06-04 11:32
2003.06.26
Два клиента BDE в сети не видят изменения пока не выключишь


14-84600
Плохой человек
2003-06-08 01:02
2003.06.26
Россия - Швейцария, 2:2


14-84549
kaif
2003-06-07 03:43
2003.06.26
Есть заказ для настоящего дельфиста





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский