plcforum.uz.ua

International PLC Forum
It is currently Wed May 23, 2018 7:53 am

All times are UTC + 3 hours


Forum rules


Please click here to view the forum rules



Post new topic Reply to topic  [ 2 posts ] 
Author Message
PostPosted: Sun Dec 24, 2017 11:46 pm 

Joined: Mon Aug 13, 2012 5:23 pm
Posts: 35
Здравствуйте.

Народ, столкнулся с проблемой, которая очевидно решена давно, но ответ сам пока не нашел. Есть тег 32bit float, значение которого нужно уменьшать на 0.01 при нажатии кнопки. Накропал маленький скрипт. При компиляции редактор предупреждает о некой потере точности, но компилирует. Сразу этому не придал значение, а зря. При нескольких нажатиях на вышеуказанную кнопку в седьмом разряде после запятой вылазит 1 и это позволяет выполниться условию if. Как по уму с этим борются? Я новичек.

Текст скрипта:
#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
float value,minvalue;
value=GetTagFloat("Zad_Am1");
minvalue=GetTagFloat("Fam_min");
if (value>minvalue)
{
value=value-0.01;
SetTagFloat("Zad_Am1",value);
}


Top
 Profile  
 
PostPosted: Sun Dec 24, 2017 11:56 pm 
Site Admin

Joined: Thu Feb 16, 2006 6:25 pm
Posts: 3221
Location: Russia
тема о коллизиях при обычном сравнении чисел с одинарной точностью и методах её обхода погибла вместе с официальным форумом (h)
Code:
для проверки равенства значения переменной item1=69.82 ?
надо проверять как то так
IF (item1# < 69.83#) AND (item1# > 69.81#)
    then print "Equal"


виноваты индусы... вместо простой двоичной выдумавшие десятичную систему счисления (boom)
https://support.microsoft.com/ru-ru/help/42980/-complete-tutorial-to-understand-ieee-floating-point-errors
Quote:
Это объясняет, почему простой пример, следующий...
будет 1.000054 печать на выходе.
Небольшая ошибка представления числа 0,0001 в двоичном формате влияет на сумму.


https://habrahabr.ru/post/112953/
Quote:
Очень распространенная ошибка при работе с float-ами возникает при проверке на равенство. Например...

ночь... рождество... хоть и не наше... но завтра на работу... (thnx)


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 2 posts ] 

All times are UTC + 3 hours


Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
Jump to:  
Powered by International PLCforum® Forum Software © PLCforum
Mobile version