Вверх ↑
Этот топик читают: Гость
Ответов: 413
Рейтинг: 57
#1: 2015-10-07 18:54:07 ЛС | профиль | цитата
Подскажите, почему при сравнении числа 0.3 с условием в компоненте If_else <=0.3 компонент выдает команду в onFalse
Пример:
code_36346.txt
карма: 0

0
файлы: 1code_36346.txt [850B] [645]
vip
#1.1контекстная реклама от партнеров
Ответов: 1925
Рейтинг: 172
#2: 2015-10-07 20:32:15 ЛС | профиль | цитата
Подтверждаю, есть ошибка. Также есть ошибка и при 0.29, и при 0.49. Скорее всего, это связано с особенностями округления.
карма: 9
0
Гость
Ответов: 17029
Рейтинг: 0
#3: 2015-10-07 20:51:43 правка | ЛС | профиль | цитата


Редактировалось 7 раз(а), последний 2021-06-24 09:02:29
карма: 0

0
Ответов: 413
Рейтинг: 57
#4: 2015-10-08 21:47:58 ЛС | профиль | цитата
3042 писал(а):
Скорее всего, это связано с особенностями округления

Эту ошибку можно исправить или нет? Если кто из гуру знает, где в коде компонента и что нужно подправить - подскажите.
карма: 0

0
Ответов: 1304
Рейтинг: 405
#5: 2015-10-08 21:57:40 ЛС | профиль | цитата
Poputchik, Во многой мудрости много печали . Надо не задумываясь было делать сравнение с текстом, как новички и всё бы получилось .
г. Add(MainForm,2953706,2, интересный у тебя вход в положение, а если необходимо найти равенство 0.3=0.3 ?

ps: интуитивно чувствую виноват Edit
карма: 3

0
Ответов: 1925
Рейтинг: 172
#6: 2015-10-08 22:03:48 ЛС | профиль | цитата
MAV писал(а):
Надо не задумываясь было делать сравнение с текстом, как новички и всё бы получилось .


Тогда 0.30 выделяет красным.
карма: 9
0
Разработчик
Ответов: 26061
Рейтинг: 2120
#7: 2015-10-08 22:06:05 ЛС | профиль | цитата
Poputchik писал(а):
Эту ошибку можно исправить или нет?

А проблема-то в чем? Ну поставьте Math с округлением до нужного разряда, и дело с концом. Че тут еще тереть-то?

Add(MainForm,2953706,168,77)
{
}
Add(Edit,14089171,168,140)
{
Left=120
Top=34
Width=70
Font=[MS Sans Serif,10,1,0,1]
Hint="Расход масла"
Text=""
Alignment=2
DataType=4
Point(doFont)
link(onChange,9140674:doOperation,[])
AddHint(-36,48,86,13,Hint)
}
Add(Font,1369054,385,140)
{
Font=[MS Sans Serif,10,1,0,1]
link(onFont,1073811:doWork2,[])
}
Add(Font,8661742,385,182)
{
Font=[MS Sans Serif,10,1,255,1]
link(onFont,1073811:doWork3,[(438,188)])
}
Add(DoData,10609957,336,140)
{
link(onEventData,1369054:doFont,[])
}
Add(DoData,14338732,336,182)
{
link(onEventData,8661742:doFont,[])
}
Add(HubEx,1073811,434,140)
{
link(onEvent,14089171:doFont,[(445,146)(445,123)(156,123)(156,160)])
}
Add(If_else,5044072,266,140)
{
Type=3
Op2=Real(0.3)
link(onTrue,10609957:doData,[])
link(onFalse,14338732:doData,[(319,153)(319,188)])
AddHint(-4,-37,30,13,Op2)
}
Add(Math,9140674,217,140)
{
OpType=35
Op2=0.001
link(onResult,5044072:doCompare,[])
AddHint(36,48,42,13,Op2)
}



карма: 22

0
Ответов: 8886
Рейтинг: 823
#8: 2015-10-08 22:09:06 ЛС | профиль | цитата
Poputchik, это не ошибка, а представление чисел в двоичной системе, в которой считает компьютер. Полагаю, что при компиляции Паскаль пользует 64-битный формат с плавающей запятой и округляет числа с 52 значащими битами, а при работе *.ехе компьютер использует свой матпроцессор с не менее чем 80-битным числом, отсюда и такие ошибки в двоичных дробях.
Точнее подскажет Galkov, если увидит. "Вот приедет барин, барин нас рассудит!"
карма: 19

0
Ответов: 1304
Рейтинг: 405
#9: 2015-10-08 22:13:26 ЛС | профиль | цитата
3042, это да, надо написать памятку пользователю что мол нефиг вводить незначащие ноли
карма: 3

0
Ответов: 1925
Рейтинг: 172
#10: 2015-10-08 22:16:58 ЛС | профиль | цитата
MAV, или отсекать их программно, если введёт.
карма: 9
0
Разработчик
Ответов: 26061
Рейтинг: 2120
#11: 2015-10-08 22:35:39 ЛС | профиль | цитата
Ну вас и понесло
карма: 22

0
Ответов: 1304
Рейтинг: 405
#12: 2015-10-08 22:42:20 ЛС | профиль | цитата
nesco писал(а):
Ну вас и понесло

а мы лёгких путей не ищем , меня просто смущает то что используя два Memory в качестве 1 и 2-го операнда получается ожидаемый результат без округления.
карма: 3

0
Ответов: 8886
Рейтинг: 823
#13: 2015-10-08 22:57:30 ЛС | профиль | цитата
MAV, схемку покажите
карма: 19

0
Ответов: 1304
Рейтинг: 405
#14: 2015-10-08 23:23:34 ЛС | профиль | цитата
code_36353.txt

Леонид, надо было мне для ясности дописать не используя Edit

карма: 3

0
файлы: 1code_36353.txt [1.3KB] [475]
14
Сообщение
...
Прикрепленные файлы
(файлы не залиты)