Quote from: SKYnv on March 14, 2012, 08:11:50 AM
столкнулся с проблемой что выпадают некорректные значения при сборе и обработке значение.
скрипты примерно такиеCode Select
sub main()
{
return int64((($1*8)/1024)/1024);
}
выпадают отрицательные значения там где их не может быть, собирается параметр .1.3.6.1.2.1.2.2.1.16.1
Poskol'ku original'noe znachenie 32 bit, to pri pervom umnozenii na 8 mi mozem vijti za predeli vozmoznih znacenij dlja 32 bitnogo celogo, i poluchit' perepolnenie. Ja bi predlozil delat' snachala privedenie znachenija k 64 bitam, chtobi interpretator vse dal'nejshie matematicheskie operacii delal kak s 64 bit znacheniem. Vot malen'kij skript, kotorij pokazivaet raznicu:
Code Select
println int64((($1 * 8) / 1024) / 1024);
println int64(((int64($1) * 8) / 1024) / 1024);
Rezul'tat:
Code Select
C:\Source\NetXMS\debug>nxscript math.nxsl 100000000
NetXMS Scripting Host Version 1.1.10
Copyright (c) 2005-2012 Victor Kirhenshtein
762
762
C:\Source\NetXMS\debug>nxscript math.nxsl 1000000000
NetXMS Scripting Host Version 1.1.10
Copyright (c) 2005-2012 Victor Kirhenshtein
-562
7629
