Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / баг с double / 23 сообщений из 23, страница 1 из 1
30.07.2018, 13:22
    #39681032
serzuzekno
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
баг с double
Приветствую. Столкнулся с проблемой только на одном сервере (тестировал 5-6 рабочих машин и 4 сервера).
Гугл ищет только проблемы с округлением, а тут идет задваивание. Т.е. 2.0 может стать 3.99999998

протестируйте у кого будет возможность.
Нужно в проводнике встать на этот vbs файл и жать ентер (т.е. запуск скрипта много раз). Ошибка выходит рандомно, примерно после 4-5 секунд.

Код: vbnet
1.
2.
3.
4.
5.
if 2.0 > 3.0 then
	do 
		msgbox "миша все сломалось"
	loop while true
end if
...
Рейтинг: 0 / 0
30.07.2018, 15:39
    #39681141
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
баг с double
Нафига тут MsgBox в цикле? Это обязательно для воспроизведения ошибки?
...
Рейтинг: 0 / 0
30.07.2018, 15:40
    #39681143
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
баг с double
serzuzeknoТ.е. 2.0 может стать 3.99999998а как с помощью данного файла выявляется именно это значение?
...
Рейтинг: 0 / 0
30.07.2018, 23:26
    #39681332
iMrTidy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
баг с double
У меня складывается сильное убеждение, что нас разводят.
...
Рейтинг: 0 / 0
30.07.2018, 23:44
    #39681336
Казанский
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
баг с double
serzuzeknoСтолкнулся с проблемой только на одном сервере... протестируйте у кого будет возможностьСами протестируйте - память у этого сервера.
...
Рейтинг: 0 / 0
31.07.2018, 02:44
    #39681351
serzuzekno
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
баг с double
Shocker.ProНафига тут MsgBox в цикле? Это обязательно для воспроизведения ошибки?
если жать ентер без цикла, то msgbox закроется и можно не поймать баг.
...
Рейтинг: 0 / 0
31.07.2018, 02:45
    #39681352
serzuzekno
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
баг с double
Shocker.ProserzuzeknoТ.е. 2.0 может стать 3.99999998а как с помощью данного файла выявляется именно это значение?
в коде пишешь 2.0, но в памяти может произойти задвой
...
Рейтинг: 0 / 0
31.07.2018, 02:50
    #39681353
serzuzekno
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
баг с double
Shocker.Pro,

если вы имели ввиду как я определил число при баге,то можно присвоить данные константы переменным, результат будет аналогичным, и переменную можно вывести в msgbox.


Казанский , спасибо за наводку. Попробую (хотя пока понятия не имею каким образом)
...
Рейтинг: 0 / 0
31.07.2018, 05:08
    #39681360
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
баг с double
КазанскийСами протестируйте - память у этого сервера.Если бы память так сильно глючила, что давала бы подобный сбой, мне кажется вообще бы ничего не работало и валилось в BSOD.
Возможно, проблема все-таки в движке, который выполняет VBS, точнее в его многозадачности, если сбой происходит именно при попытке запустить сотни скриптов одновременно на выполнение. Естественно, в сочетании с какой-то конфигурацией системы.

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


serzuzekno,
А если запихать этот код тыщу раз, но в один файл, можно добиться подобного сбоя именно при единичном запуске файла?
...
Рейтинг: 0 / 0
31.07.2018, 05:10
    #39681361
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
баг с double
serzuzeknoесли вы имели ввиду как я определил число при баге,то можно присвоить данные константы переменным, результат будет аналогичным, и переменную можно вывести в msgbox.Что будет, если инициализировать несколко разных констант со значением 2.0 и другими значениями? Сбой будет только в одной из них?
...
Рейтинг: 0 / 0
31.07.2018, 06:23
    #39681371
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
баг с double
Попробовал, у меня не воспроизводится

Еще попробовал:
Код: vbnet
1.
2.
3.
4.
5.
6.
Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run "c:\1\1.vbs"
...
много
....
WSHShell.Run "c:\1\1.vbs"

тоже не вопроизвелось - попробуйте у себя
...
Рейтинг: 0 / 0
31.07.2018, 11:09
    #39681461
serzuzekno
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
баг с double
Shocker.ProПопробовал, у меня не воспроизводится

Еще попробовал:
Код: vbnet
1.
2.
3.
4.
5.
6.
Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run "c:\1\1.vbs"
...
много
....
WSHShell.Run "c:\1\1.vbs"

тоже не вопроизвелось - попробуйте у себя

Проверил ваш скрипт в цикле. Из 100 попыток ошибка вышла 5 раз.

Shocker.ProВозможно, проблема все-таки в движке, который выполняет VBS, точнее в его многозадачности, если сбой происходит именно при попытке запустить сотни скриптов одновременно на выполнение. Естественно, в сочетании с какой-то конфигурацией системы.

Либо может даже в компиляторе, который в таких нагруженных условиях сбоит при записи литерала при разборе файла...х.з.
Дело точно не в литерале, так как значения тянулись из БД и скрипт выполняется 1 раз в минуту, т.е. не множество раз в один момент.



Shocker.ProЧто будет, если инициализировать несколко разных констант со значением 2.0 и другими значениями? Сбой будет только в одной из них?
Попробовал. Баг образовался только в одной переменной
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
a=2.0
b=2.0
c=3.0
if a > b then
	do 
		msgbox "a: " & a & " " & "b: " & b 
	loop while true
end if


результат

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
---------------------------

---------------------------
a: 3,99999999999999 b: 2
---------------------------
OK   
---------------------------



Данные движка
Код: vbnet
1.
2.
3.
4.
WScript.Version: 5.8
WScript.BuildVersion: 18283
ScriptEngineBuildVersion: 18817
ScriptEngineMajorVersion: 5


сравнивал точно такую же версию движка на другом сервере, там все ок. Вероятно таки проблема с железом.

Память протестирую при случае, так как это продакшн сервер, перезагружать проблематично.
...
Рейтинг: 0 / 0
31.07.2018, 11:16
    #39681462
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
баг с double
serzuzeknoПопробовал. Баг образовался только в одной переменной
Код: vbnet
1.
2.
3.
4.
a=2.0
b=2.0
c=3.0
if a > b then

не совсем корректный тест, так как если изменятся a и b одновременно, вы не увидите. Интересно было бы
Код: vbnet
1.
if a > 3.0


serzuzeknoт.е. не множество раз в один момент.хм, это меняет дело.
Я бы, конечно, грешил больше на вирус, чем на железо. Уверен, что такая большая частота возникновения подобной ошибки обязательно проявилась в других местах, сервер не смог бы работать нормально. Вирус моб бы закосячить конкретно движок скрипта, но... такие прикольные зловреды писали в 90-ых... сейчас никому не интересно.

Интересно, это баг только на плавающей запятой, с целым числом не проявляется?
...
Рейтинг: 0 / 0
31.07.2018, 11:36
    #39681477
serzuzekno
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
баг с double
Действительно, опечатался, пардон.

С if a > 3.0 результат разный

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
a=2.0
b=2.0
if a > 3.0 then
	do 
		msgbox "a: " & a & " " & "b: " & b 
	loop while true
end if


---------------------------

---------------------------
a: 3,99999999999999 b: 3,99999999999999
---------------------------
OK   
---------------------------

---------------------------

---------------------------
a: 3,99999999999999 b: 2
---------------------------
OK   
---------------------------

Результат с 4.0
---------------------------

---------------------------
a: 7,99999999999999 b: 7,99999999999999
---------------------------
OK   
---------------------------


с 1.0 более забавнее
---------------------------

---------------------------
a: 2 b: 2
---------------------------
OK   
---------------------------



С целым числом баг не проявляется. С запятой проявляется, похоже, только при 1.0, 2.0 и 4.0
...
Рейтинг: 0 / 0
31.07.2018, 11:43
    #39681480
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
баг с double
не зря же тип Double называется :D Всем по x2 значения :)
c Single такая же беда?
...
Рейтинг: 0 / 0
31.07.2018, 12:00
    #39681493
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
баг с double
сервер какой версии и какой у вас проц стоит? неужели опять баг FDIV?
...
Рейтинг: 0 / 0
31.07.2018, 12:03
    #39681496
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
баг с double
serzuzeknoтолько при 1.0, 2.0 и 4.0Что насчет 8.0, 16.0?

serzuzeknoС целым числом баг не проявляетсяПроцессор отличается от всех остальных серверов?
...
Рейтинг: 0 / 0
31.07.2018, 15:40
    #39681626
serzuzekno
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
баг с double
Протестировал с 1 до 100 в цикле. На 74 итерации сервер умер, пришлось перегружать (вероятно ресурсы не освобождал)

закономерность выявилась следующая
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
1.0= 2
2.0= 3,99999999999999
4.0= 7,99999999999999
8.0= 16
16.0= 31,9999999999999
32.0= 63,9999999999999
64.0= 128
128.0= 256
и, думаю, т.д.



System Manufacturer VMware, Inc.
Processor Intel(R) Xeon(R) CPU E5-2690 v3 @ 2.60GHz, 2596 Mhz, 20 Core(s), 20 Logical Processor(s)
OS Name Microsoft Windows Server 2008 R2 Enterprise
Version 6.1.7601 Service Pack 1 Build 7601

На других серверах другая конфигурация. Похожих нет, но все виртуальные.

Roman Mejtesне зря же тип Double называется :D Всем по x2 значения :)
c Single такая же беда?
С коллегами уже посмеялись по поводу задвоения дабл )Не представляю как проверить Single в скрипте.
...
Рейтинг: 0 / 0
31.07.2018, 16:02
    #39681642
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
баг с double
Intel(R) Xeon(R) CPU E5-2690 v3

на других серверах другие стоят процы?
...
Рейтинг: 0 / 0
31.07.2018, 16:47
    #39681667
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
баг с double
подключитесь отладчиком и посмотрите, что происходит, на простом примере
...
Рейтинг: 0 / 0
31.07.2018, 17:22
    #39681683
serzuzekno
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
баг с double
Konst_One Intel(R) Xeon(R) CPU E5-2690 v3

на других серверах другие стоят процы?
Семейство то же. Пример другого, где все ок
Процессор Intel(R) Xeon(R) CPU E5-2665 0 @ 2.40GHz, 2394 МГц, ядер: 6, логических процессоров: 6
...
Рейтинг: 0 / 0
31.07.2018, 17:23
    #39681685
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
баг с double
может патча какого нет на той машине
...
Рейтинг: 0 / 0
31.07.2018, 20:27
    #39681747
Казанский
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
баг с double
serzuzeknoНе представляю как проверить Single в скрипте.Функция CSng, она действительно преобразует число так, что появляется разница между Double и Single

Код: vbnet
1.
2.
3.
d=3.1
s=csng(d)
wscript.echo "s: " & typename(s) & vblf & "d: " & typename(d) & vblf & s-d
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / баг с double / 23 сообщений из 23, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]