powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / баг с double
23 сообщений из 23, страница 1 из 1
баг с double
    #39681032
serzuzekno
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую. Столкнулся с проблемой только на одном сервере (тестировал 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
баг с double
    #39681141
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нафига тут MsgBox в цикле? Это обязательно для воспроизведения ошибки?
...
Рейтинг: 0 / 0
баг с double
    #39681143
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
serzuzeknoТ.е. 2.0 может стать 3.99999998а как с помощью данного файла выявляется именно это значение?
...
Рейтинг: 0 / 0
баг с double
    #39681332
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня складывается сильное убеждение, что нас разводят.
...
Рейтинг: 0 / 0
баг с double
    #39681336
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
serzuzeknoСтолкнулся с проблемой только на одном сервере... протестируйте у кого будет возможностьСами протестируйте - память у этого сервера.
...
Рейтинг: 0 / 0
баг с double
    #39681351
serzuzekno
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProНафига тут MsgBox в цикле? Это обязательно для воспроизведения ошибки?
если жать ентер без цикла, то msgbox закроется и можно не поймать баг.
...
Рейтинг: 0 / 0
баг с double
    #39681352
serzuzekno
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProserzuzeknoТ.е. 2.0 может стать 3.99999998а как с помощью данного файла выявляется именно это значение?
в коде пишешь 2.0, но в памяти может произойти задвой
...
Рейтинг: 0 / 0
баг с double
    #39681353
serzuzekno
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

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


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

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


serzuzekno,
А если запихать этот код тыщу раз, но в один файл, можно добиться подобного сбоя именно при единичном запуске файла?
...
Рейтинг: 0 / 0
баг с double
    #39681361
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
serzuzeknoесли вы имели ввиду как я определил число при баге,то можно присвоить данные константы переменным, результат будет аналогичным, и переменную можно вывести в msgbox.Что будет, если инициализировать несколко разных констант со значением 2.0 и другими значениями? Сбой будет только в одной из них?
...
Рейтинг: 0 / 0
баг с double
    #39681371
Фотография 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"

тоже не вопроизвелось - попробуйте у себя
...
Рейтинг: 0 / 0
баг с double
    #39681461
serzuzekno
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
баг с double
    #39681462
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
баг с double
    #39681477
serzuzekno
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Действительно, опечатался, пардон.

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

serzuzeknoС целым числом баг не проявляетсяПроцессор отличается от всех остальных серверов?
...
Рейтинг: 0 / 0
баг с double
    #39681626
serzuzekno
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Протестировал с 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
баг с double
    #39681642
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Intel(R) Xeon(R) CPU E5-2690 v3

на других серверах другие стоят процы?
...
Рейтинг: 0 / 0
баг с double
    #39681667
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
подключитесь отладчиком и посмотрите, что происходит, на простом примере
...
Рейтинг: 0 / 0
баг с double
    #39681683
serzuzekno
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
баг с double
    #39681685
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может патча какого нет на той машине
...
Рейтинг: 0 / 0
баг с double
    #39681747
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
23 сообщений из 23, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / баг с double
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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