Страницы: 1
RSS
почему эти числа не равны?
 
Добрый вечер!

подскажите, почему числа 10000 и равны и не равны одновременно?
эти значения являются результатом простых формул вида "A делить на B" и "ИНДЕКС".



в макросах простенькие виды проверок
Спасибо
 
с чего вы взяли, что они не равны?
вы к рангу добавляете количество повторений числа минус единицу.
понятно что числа в столбце ранг будут увеличиваться, чем больше одинаковых чисел будет в столбце С.
 
Dima S все верно
так вместо 4 4 6 напротив 10000 должны быть 3 4 5, нет?
если вместо всех трёх имеющихся 10000 вбить с клавиатуры вручную 10000 - то ранг напротив них показывается нормально

Цитата

с чего вы взяли, что они не равны?
плюс в макросе в этих трех строчках a=1 только в третьей. в первых двух макрос не переходит к "then"
Код
If a1 = a2 Then a = 1
If a2 = a3 Then a = 1
If a1 = a3 Then a = 1

и в тот же момент они равны в столбце B там где написано ИСТИНА - результат формульной проверки
Изменено: KUDRIN - 25.01.2014 02:24:49
 
Они реально "неравны"  :o  
Если скопировать C6 и вставить C7 все становиться на свое место

Прикольно, а так работает: =РАНГ.РВ(--(C6&"");C:C;0)+СЧЁТЕСЛИ(C$6:C6;C6)-1
Изменено: Nic70y - 25.01.2014 02:37:15 (синим)
 
Тут смотрите:
Скрытый текст
Смайлы нужно игнорировать...

Что-то под спойлером проблематично править... Ну да ладно.
А в макросе сравнивайте  a1.Text или CStr(a1)
Изменено: Hugo - 25.01.2014 02:34:14
 
Цитата
А в макросе сравнивайте a1.Text или CStr(a1)
спасибо. странно, что как раз a1.value, a2.value, a3.value не равны, а a1.text, a2.text, a3.text и crst(a1), crst(a2), crst(a3) равны

если сделать формат ячеек и 15 разрядов, то там нет значений 9999.9999999999982. там 10000,000000000000000

вбил с клавиатуры 9999,99999999999 и 10000 (на синем фоне в файле)
формула показала ЛОЖЬ, то есть не равны, как и должно быть  
а первые три 10000 в колонке C получаются магические какие то. если формула показывает равны, а xml показывает не равны
Изменено: KUDRIN - 25.01.2014 02:47:36
 
Похоже что больше никак не выявить, даже глазом  :(
Если взять в массив - там тоже всюду 10000...
Сталкивался уже - в старой теме "интересные вопросы VBA" уже показывал похожий файл клиента. Там это была выгрузка откуда-то... и кстати в xls (т.е. xml нет, и без 2007+ его и не посмотреть)
Изменено: Hugo - 25.01.2014 02:49:52
 
Hugo спасибо за внимание к вопросу, и за перевод темы в статус риторических  ;)  

на зеленом фоне сработало только =ЗНАЧЕН(ТЕКСТ(C6;0)) если преобразовать эти значения так, а потом вставить получившиеся назад, то ранг исправляется
исходные данные я тоже как ни странно получил от третьего лица, т.е. вносил их в виде исходных значений не я
наверное есть какие то спец. условия, при которых происходит такая магия в книгах Excel
и как ни странно тот файл, который был исходным и с которого я копировал значения, тоже имеет расширение xls, т.е. формат 2003-го офиса
Изменено: KUDRIN - 25.01.2014 03:06:14
 
Код
 Прикольно, а так работает: =РАНГ.РВ(--(C6&"");C:C;0)+СЧЁТЕСЛИ(C$6:C6;C6)-1

Nic70y спасибо за формулу
действительно, если нет времени ковырять исходные данные, то похоже что такая формула выручит

хотя при прогонке этой формулой получились тоже не все значения. некоторые #Н/Д
вставил одно такое в прикрепленный файл
и похожее вбил с клавиатуры - та же самая магия, одно работает, а второе нет
хотя если вбить такое же (в данном примере вбить 11857,1428571429, а не 11857,1428571428 в C17), то сразу ранг для С16 начинает работать  :|  

наверное это действительно какое то бинарное внутреннее устройство файла, из-за которого такие вещи вылазят
Изменено: KUDRIN - 25.01.2014 03:37:16
 
А можно и так  :oops:

Код
=РАНГ.РВ(ОКРУГЛ(C6;15);C:C;0)+СЧЁТЕСЛИ(C$6:C6;C6)-1
 
а что, если создать новую книгу
ввести 2,2 в ячейку
сохранить
то в xml / sheet1 у всех будет такое?   :|  

Код
<row r="7" spans="4:4" x14ac:dyDescent="0.25">
<c r="D7">
<v>2.2000000000000002</v>
</c>
</row>
 
хотя если ввести 3 или 5, то будет <v>3</v> или <v>5</v>
число 2.2000000000000002 что то совсем не гуглится

ввёл 17,1
получил в xml <v>17.100000000000001</v>

если это у всех так, плюс тут была где то давнишняя тема про точность чисел в Excel'е
то совсем неудивительно, что 2,2 не равно 2,2 и нужно округлять

я в том файле, который исходный, нашел в xml 46 чисел типа X.00000000000000X
ячейки заменил через тхт - скопировал ячейки, вставил в тхт, скопировал из тхт и вставил обратно в Excel, сохранил
в итоге из 46 значений "округлились" только половина. остальные 25 штук так  остались в таком виде в xml
Изменено: KUDRIN - 25.01.2014 06:23:06
 
Ну чтоб убить баг - думаю хватит "текст по столбцам-готово" этому столбцу.
Но на <v>2.2000000000000002</v> это не влияет. Даже убил в схеме, открыл файл - всё вернулось назад.
 
Цитата
Даже убил в схеме, открыл файл - всё вернулось назад.
попробуйте создать новый файл с нуля и ввести в любую ячейку 2,2 с клавиатуры
потом посмотреть в xml значение в sheet1
Изменено: KUDRIN - 25.01.2014 12:49:14
 
Так и делал. Потом в схеме исправил, открыл файл, сохранил - нули снова на месте...
 
а, теперь понял - "схема" = "xml"
Изменено: KUDRIN - 25.01.2014 14:11:22
 
Ошибка возникает на 16 знаке после запятой. Откуда 16 знак? Читайте о стандарте:  
http://www.vbstreets.ru/VB/Articles/66541.aspx

Думаю, Вам будет интересно познакомиться с возможностями стандарта IEEE 754 . Особенно с разделом "заключение":
Цитата
Стандарт IEEE 754 широко применяется в технике и программировании. При этом хочется отметить, что в нем заложены существенные недостатки. Создается впечатление, что в разработке стандарта не принимали участие профессиональные математики. Директор института математики и ее применений в Миннеаполисе, США Дуглас Н.Арнольд утверждает, что целый ряд крупнейших аварий с человеческими жертвами и миллиардными убытками всецело обязан нынешней технологии компьютерных вычислений и представлений данных по стандарту IEEE 754.
Вы можете прочитать об этом в статье "IEEE754-тика угрожает человечеству"

Как программист скажу, никогда не применяйте одинарную точность (single) в программах, если полностью не представляете и не контролируете всю процедуру расчета, так как результат компьютерного расчета может быть не предсказуем.

Вот результат вычислений этой программы:
Код
a=0.3 c=0.3 c : a = 1.00000003973643
a=0.3 c=0.3 a : c = 0.999999960263572
Здесь вы видите не только не точный результат, но и зависимость результата от расположения переменных. Это только одна операция, представьте, что операций тысячи. Результат таких вычислений будет не предсказуем.
Страницы: 1
Наверх