Infer.NET рдХреЛрдб рдореЗрдВ рдХреНрдпрд╛ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдЫрд┐рдкреА рд╣реИрдВ?


Microsoft рдХрд╛ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рдХрд╛ рдкреНрд░рдХрд╛рд╢рди рдЙрдиреНрд╣реЗрдВ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдХрд╛рд░рдг рд╣реИред рдпрд╣ рд╕рдордп рдХреЛрдИ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рдерд╛, рдФрд░ рдЖрдЬ рд╣рдо Infer.NET рдХреЛрдб рдореЗрдВ рдкрд╛рдП рдЧрдП рд╕рдВрджрд┐рдЧреНрдз рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдиреАрдЪреЗ - рдмрд┐рдВрджреБ рдкрд░ рдкрд╣реБрдВрдЪреЗрдВ!

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛


Infer.NET Microsoft рд╕реЗ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдПрдХ рдорд╢реАрди рд╕реАрдЦрдиреЗ рдХреА рдкреНрд░рдгрд╛рд▓реА рд╣реИред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рд╣рд╛рд▓ рд╣реА рдореЗрдВ GitHub рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реЛ рдЧрдпрд╛ рд╣реИ , рдЬреЛ рдЗрд╕рдХреЗ рд╕рддреНрдпрд╛рдкрди рдХрд╛ рдХрд╛рд░рдг рдерд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕рдВрд╕реНрдХрд░рдг 6.26 рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЬрд╛рдВрдЪ рдХреА рдЧрдИ рдереАред рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛ рджреВрдВ рдХрд┐ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╡рд┐рдВрдбреЛрдЬ, рд▓рд┐рдирдХреНрд╕, рдореИрдХрдУрдПрд╕ рдХреЗ рддрд╣рдд C \ C ++ \ C # (рдФрд░ рдЬрд▓реНрдж рд╣реА рдЬрд╛рд╡рд╛ рдореЗрдВ) рдХреЛрдб рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИред C # рдХреЛрдб рдЕрдм рддрдХ рд╣рдо рдХреЗрд╡рд▓ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рддрд╣рдд рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдЖрдЬрд╝рдорд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЪреЗрдХ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдмреЗрд╣рдж рд╕рд░рд▓ рдФрд░ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдерд╛ред рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ GitHub рд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдЕрдирд▓реЛрдб рдХрд┐рдпрд╛, рдЖрд╡рд╢реНрдпрдХ рдкреИрдХреЗрдЬ (рдирд┐рд░реНрднрд░рддрд╛) рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛, рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд┐рдпрд╛ рдХрд┐ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рдкрд╛рд╕ рдкреВрд░реНрдг рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛред рдХреБрдЫ рдХреНрд▓рд┐рдХреЛрдВ рдореЗрдВ рдЕрд╕реЗрдВрдмрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рд▓рд┐рдП рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдкреНрд▓рдЧрдЗрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╢реБрд░реВ рдХрд┐рдпрд╛ред

рд╡реИрд╕реЗ, рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Microsoft рджреНрд╡рд╛рд░рд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдпрд╣ рдкрд╣рд▓рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдирд╣реАрдВ рд╣реИ - рдЕрдиреНрдп рдереЗ: рд░реЛрд╕рд▓рд┐рди , MSBuild , PowerShell , CoreFX рдФрд░ рдЕрдиреНрдп ред

рдиреЛрдЯред рдпрджрд┐ рдЖрдк рдпрд╛ рдЖрдкрдХреЗ рдкрд░рд┐рдЪрд┐рдд рдЬрд╛рд╡рд╛ рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк "рдореБрдЭреЗ рдЬрд╛рд╡рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪрд╛рд╣рддреЗ рд╣реИрдВ" рдХрд╛ рдЪрдпрди рдХрд░рдХреЗ рд╕рдорд░реНрдерди рдореЗрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдХреЛрдИ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдмреАрдЯрд╛ рд╕рдВрд╕реНрдХрд░рдг рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЬрд▓реНрдж рд╣реА рдЙрдкрд▓рдмреНрдз рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХрд╣реАрдВ рдПрдХ рдЧреБрдкреНрдд рдкреНрд░рдпреЛрдЧрд╢рд╛рд▓рд╛ рдореЗрдВ (рджреАрд╡рд╛рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ), рд▓реЛрдЧ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рд▓реЗрдХрд┐рди рдкрд░реНрдпрд╛рдкреНрдд рд╕рд╛рд░ рдмрд╛рдд - рдЪрд▓реЛ рдХреЛрдб рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рджреЗрдЦреЗрдВред

рдпрд╣ рдПрдХ рдмрдЧ рдпрд╛ рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рд╣реИ?


рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐ рдХреЛ рд╕реНрд╡рдпрдВ рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ - рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдХрд╛рд░реНрдпред " 2017 рдХреЗ рд▓рд┐рдП рд╕реА ++ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рд╢реАрд░реНрд╖ 10 рддреНрд░реБрдЯрд┐рдпреЛрдВ " рд▓реЗрдЦ рдореЗрдВ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдХреЛрдИ рдордЬрд╛рдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рддреЛ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдХреЗ рдмрд╛рдж рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рдкрдврд╝рдиреЗ рдореЗрдВ рдЬрд▓реНрджрдмрд╛рдЬреА рди рдХрд░реЗрдВред

private void MergeParallelTransitions() { .... if ( transition1.DestinationStateIndex == transition2.DestinationStateIndex && transition1.Group == transition2.Group) { if (transition1.IsEpsilon && transition2.IsEpsilon) { .... } else if (!transition1.IsEpsilon && !transition2.IsEpsilon) { .... if (double.IsInfinity(transition1.Weight.Value) && double.IsInfinity(transition1.Weight.Value)) { newElementDistribution.SetToSum( 1.0, transition1.ElementDistribution, 1.0, transition2.ElementDistribution); } else { newElementDistribution.SetToSum( transition1.Weight.Value, transition1.ElementDistribution, transition2.Weight.Value, transition2.ElementDistribution); } .... } 

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V3001 рд╕рдорд╛рди рдЙрдк-рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ рд╣реИрдВ 'рдбрдмрд▓.рдЗрдиреНрд╕.рдЗрдирдлрд╝рд┐рдирд┐рдЯреА (рдЯреНрд░рд╛рдВрдЬрд╝рд┐рд╢рди 1. рд╡рд╛рдЗрдЯ.рд╡реИрд▓реНрдпреВ)' рдмрд╛рдИрдВ рдУрд░ рдФрд░ '&&' рдСрдкрд░реЗрдЯрд░ рдХреЗ рджрд╛рдИрдВ рдУрд░ред рд░рдирдЯрд╛рдЗрдо рдСрдЯреЛрдореИрдЯрди.рд╕рд┐рдореНрдкреНрд▓реАрдлрд┐рдХреЗрд╢рди .cs 479

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд┐рдзрд┐ рдЪрд░ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реА рд╣реИ - рдЯреНрд░рд╛рдВрдЬрд╝рд┐рд╢рди 1 рдФрд░ рдЯреНрд░рд╛рдВрдЬрд╝рд┐рд╢рди 2 ред рд╕рдорд╛рди рдирд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрднреА-рдХрднреА рдХрд╛рдлреА рдиреНрдпрд╛рдпрд╕рдВрдЧрдд рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдпрд╛рдж рд░рдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдирд╛рдо рдХреЗ рд╕рд╛рде рдЧрд▓рддреА рд╕реЗ рдХрд╣реАрдВ рдЧрд▓рддреА рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдмрдврд╝ рдЬрд╛рддреА рд╣реИред

рдпрд╣ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЕрдирдиреНрддрддрд╛ рдХреЗ рд▓рд┐рдП рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рдЬрд╛рдВрдЪ ( рдбрдмрд▓.рдИ.рдЗрдирдлрд┐рдирд┐рдЯреА )ред рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рдХрд╛рд░рдг, рд╣рдордиреЗ рдПрдХ рд╣реА рдЪрд░ рдХреЗ рдореВрд▓реНрдп рдХреЛ 2 рдмрд╛рд░ рдЬрд╛рдВрдЪрд╛ - Trans1.1ight.Value ред рджреВрд╕рд░реЗ рд╕рдмрдбрд┐рдкреНрд░реЗрд╢рди рдореЗрдВ рдЬрд╛рдБрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдорд╛рди рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред

рдПрдХ рдФрд░ рд╕рдорд╛рди рд╕рдВрджрд┐рдЧреНрдз рдХреЛрдбред

 internal MethodBase ToMethodInternal(IMethodReference imr) { .... bf |= BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance; .... } 

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V3001 рд╕рдорд╛рди рдЙрдк-рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ рд╣реИрдВ 'BindingFlags.Public' рдмрд╛рдИрдВ рдУрд░ рдФрд░ 'рджрд╛рдИрдВ рдУрд░' рд╣реИред рдСрдкрд░реЗрдЯрд░ред рд╕рдВрдХрд▓рдХ CodeBuilder.cs 194

Bf рд╡реИрд░рд┐рдПрдмрд▓ рдХрд╛ рдорд╛рди рдмрдирд╛рддреЗ рд╕рдордп, BindingFlags.Public рдЧрдгрди рддрддреНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рджреЛ рдмрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╛ рддреЛ рдЗрд╕ рдХреЛрдб рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝реНрд▓реИрдЧрд┐рдВрдЧ рдСрдкрд░реЗрд╢рди рд╣реЛрддрд╛ рд╣реИ, рдпрд╛ BindingFlags.Public рдХреЗ рджреВрд╕рд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрдЬрд╛рдп , рдПрдХ рдЕрд▓рдЧ рдЧрдгрдирд╛ рдореВрд▓реНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╡реИрд╕реЗ, рд╕реЛрд░реНрд╕ рдХреЛрдб рдореЗрдВ рдпрд╣ рдХреЛрдб рдПрдХ рд▓рд╛рдЗрди рдкрд░ рд▓рд┐рдЦрд╛ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдпрд╣ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рд╢реИрд▓реА (рдЬреИрд╕реЗ рдпрд╣рд╛рдВ) рдореЗрдВ рд╕реНрд╡рд░реВрдкрд┐рдд рд╣реИ, рддреЛ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИред

рдЪрд▓реЛ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред рдореИрдВ рд╡рд┐рдзрд┐ рдХреЗ рдкреВрд░реЗ рд╢рд░реАрд░ рдХреЛ рд▓реЗ рдЖрддрд╛ рд╣реВрдВ рдФрд░ рдлрд┐рд░ рд╕реЗ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рд╕реНрд╡рдпрдВ рддреНрд░реБрдЯрд┐ (рдпрд╛ рд╢рд╛рдпрдж рддреНрд░реБрдЯрд┐) рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВред

 private void ForEachPrefix(IExpression expr, Action<IExpression> action) { // This method must be kept consistent with GetTargets. if (expr is IArrayIndexerExpression) ForEachPrefix(((IArrayIndexerExpression)expr).Target, action); else if (expr is IAddressOutExpression) ForEachPrefix(((IAddressOutExpression)expr).Expression, action); else if (expr is IPropertyReferenceExpression) ForEachPrefix(((IPropertyReferenceExpression)expr).Target, action); else if (expr is IFieldReferenceExpression) { IExpression target = ((IFieldReferenceExpression)expr).Target; if (!(target is IThisReferenceExpression)) ForEachPrefix(target, action); } else if (expr is ICastExpression) ForEachPrefix(((ICastExpression)expr).Expression, action); else if (expr is IPropertyIndexerExpression) ForEachPrefix(((IPropertyIndexerExpression)expr).Target, action); else if (expr is IEventReferenceExpression) ForEachPrefix(((IEventReferenceExpression)expr).Target, action); else if (expr is IUnaryExpression) ForEachPrefix(((IUnaryExpression)expr).Expression, action); else if (expr is IAddressReferenceExpression) ForEachPrefix(((IAddressReferenceExpression)expr).Expression, action); else if (expr is IMethodInvokeExpression) ForEachPrefix(((IMethodInvokeExpression)expr).Method, action); else if (expr is IMethodReferenceExpression) ForEachPrefix(((IMethodReferenceExpression)expr).Target, action); else if (expr is IUnaryExpression) ForEachPrefix(((IUnaryExpression)expr).Expression, action); else if (expr is IAddressReferenceExpression) ForEachPrefix(((IAddressReferenceExpression)expr).Expression, action); else if (expr is IDelegateInvokeExpression) ForEachPrefix(((IDelegateInvokeExpression)expr).Target, action); action(expr); } 

рдХреНрдпрд╛ рдЖрдкрдиреЗ рдкрд╛рдпрд╛ рд╣реИ? рд╣рдо рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣реЗ рд╣реИрдВ!

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА :
  • V3003 'if (A) {...} рдХрд╛ рдЙрдкрдпреЛрдЧ if (A) {...}' рдкреИрдЯрд░реНрди рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛ред рддрд╛рд░реНрдХрд┐рдХ рддреНрд░реБрдЯрд┐ рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рд▓рд╛рдЗрдиреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ: 1719, 1727ред рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛрдбрдХреНрд░реАрдЧреНрдирд╛рдЗрдЬрд░ред 1719
  • V3003 'if (A) {...} рдХрд╛ рдЙрдкрдпреЛрдЧ if (A) {...}' рдкреИрдЯрд░реНрди рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛ред рддрд╛рд░реНрдХрд┐рдХ рддреНрд░реБрдЯрд┐ рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рдЬрд╛рдБрдЪ рд▓рд╛рдЗрдиреЗрдВ: резecреирез, рез.реи репред рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛрдбрдХреНрд░реАрдЧреНрдирд╛рдЗрдЬрд╝рд░ред рез .реирез

рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рдереЛрдбрд╝рд╛ рд╕рд░рд▓ рдХрд░реЗрдВред

 private void ForEachPrefix(IExpression expr, Action<IExpression> action) { if (....) .... else if (expr is IUnaryExpression) ForEachPrefix(((IUnaryExpression)expr).Expression, action); else if (expr is IAddressReferenceExpression) ForEachPrefix(((IAddressReferenceExpression)expr).Expression, action); .... else if (expr is IUnaryExpression) ForEachPrefix(((IUnaryExpression)expr).Expression, action); else if (expr is IAddressReferenceExpression) ForEachPrefix(((IAddressReferenceExpression)expr).Expression, action) .... } 

рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдФрд░ рдлрд┐рд░ рдХрдИ рд╢рд╛рдЦрд╛рдУрдВ рдХреА рдЕрдЧрд░ рдмрдпрд╛рдиреЛрдВ рдХреА рдирдХрд▓ рдХреА рдЬрд╛рддреА рд╣реИред рд╢рд╛рдпрдж рдЗрд╕ рдХреЛрдб рдХреЛ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рд╕рдорд╕реНрдпрд╛ рдЙрддреНрдкрдиреНрди рд╣реБрдИред рдЕрдм рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рддрдм рд╕реЗ - рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреА рд╢рд╛рдЦрд╛рдУрдВ рдХреЛ рдХрднреА рднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:

  • рдпрджрд┐ рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╕рд╣реА рд╣реИ, рддреЛ рдкрд╣рд▓реЗ рдХрд╛ рд╢рд░реАрд░ рдпрджрд┐ рд╕рдВрдмрдВрдзрд┐рдд рдЬреЛрдбрд╝реА рд╕реЗ рдХрдерди рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ;
  • рдпрджрд┐ рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЭреВрдареА рд╣реИ, рддреЛ рдпрд╣ рджреВрд╕рд░реЗ рдореЗрдВ рдЧрд▓рдд рд╣реЛрдЧреАред

рддрдм рд╕реЗ- рд╢рд╛рдЦрд╛рдУрдВ рдореЗрдВ рд╕рдорд╛рди рдХрд╛рд░реНрдп рд╣реЛрддреЗ рд╣реИрдВ, рдЕрдм рдпрд╣ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреЛрдб рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ рдЬреЛ рднреНрд░рд╛рдордХ рд╣реИред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрд▓рдЧ рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ рд╣реИ - рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреЗ рдмрдЬрд╛рдп, рдЕрдиреНрдп рдЬрд╛рдВрдЪ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП рдереАред

рд╣рдо рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред

 public int Compare(Pair<int, int> x, Pair<int, int> y) { if (x.First < y.First) { if (x.Second >= y.Second) { // y strictly contains x return 1; } else { // No containment - order by left bound return 1; } } else if (x.First > y.First) { if (x.Second <= y.Second) { // x strictly contains y return -1; } else { // No containment - order by left bound return -1; } } .... } 

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА :
  • V3004 'рддрддреНрдХрд╛рд▓реАрди' рдХрдерди 'рдФрд░' рдХрдерди рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рд░рдирдЯрд╛рдЗрдо рд░реЗрдЧреЗрдХреНрд╕рдкреНрд░реАрдмреНрд░реАрд╕реНрдЯ.рд▓ 1080
  • V3004 'рддрддреНрдХрд╛рд▓реАрди' рдХрдерди 'рдФрд░' рдХрдерди рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рд░рдВрдЯрд╛рдЗрдо рд░реЗрдЧреЗрдХреНрд╕рдкреНрд░реАрдмреНрд░реАрдмреБрд▓ред 1093

рдпрд╣ рдХреЛрдб рдмреЗрд╣рдж рд╕рдВрджреЗрд╣рд╛рд╕реНрдкрдж рд▓рдЧрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рддрддреНрдХрд╛рд▓реАрди рдФрд░ рдЕрдиреНрдп рд╢рд╛рдЦрд╛рдУрдВ рдХреЗ рд╕рдорд╛рди рдирд┐рдХрд╛рдпреЛрдВ рдХреЗ рд╕рд╛рде рджреЛ рд╕рд╢рд░реНрдд рдмрдпрд╛рди рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рджреЛрдиреЛрдВ рд╣реА рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╢рд╛рдпрдж рд╡рд┐рднрд┐рдиреНрди рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред рдпрд╛, рдпрджрд┐ рдпрд╣ рдПрдХ рдЧрд░реНрднрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ, рддреЛ рдирд┐рд░рд░реНрдердХ рд╕рд╢рд░реНрдд рдмрдпрд╛рдиреЛрдВ рдХреЛ рд╣рдЯрд╛рдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред

рджрд┐рд▓рдЪрд╕реНрдк рдЪрдХреНрд░ рдереЗред рдиреАрдЪреЗ рдЙрджрд╛рд╣рд░рдг:

 private static Set<StochasticityPattern> IntersectPatterns(IEnumerable<StochasticityPattern> patterns) { Set<StochasticityPattern> result = new Set<StochasticityPattern>(); result.AddRange(patterns); bool changed; do { int count = result.Count; AddIntersections(result); changed = (result.Count != count); break; } while (changed); return result; } 

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА : V3020 рдПрдХ рд▓реВрдк рдХреЗ рднреАрддрд░ рдмрд┐рдирд╛ рд╢рд░реНрдд 'рдмреНрд░реЗрдХ'ред рдХрдВрдкрд╛рдЗрд▓рд░ DefaultFactorManager.cs 474

рдмрд┐рдирд╛ рд╢рд░реНрдд рд╡рд┐рд░рд╛рдо рдХрдерди рдХреЗ рдХрд╛рд░рдг, рд▓реВрдк рдХрд╛ рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдирд┐рдпрдВрддреНрд░рдг рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рднреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХреЛрдб рдЕрдЬреАрдм рдФрд░ рд╕рдВрджрд┐рдЧреНрдз рджрд┐рдЦрддрд╛ рд╣реИред

рдПрдХ рд╣реА рд╡рд┐рдзрд┐ (рд╕рдЯреАрдХ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐) рджреВрд╕рд░реА рдХрдХреНрд╖рд╛ рдореЗрдВ рдкрд╛рдИ рдЧрдИ рдереАред рд╕рдВрд╡рд╛рджрджрд╛рддрд╛ рдХреА рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рдЕрдиреБрд░реВрдк: V3020 рд▓реВрдк рдХреЗ рднреАрддрд░ рдмрд┐рдирд╛ рд╢рд░реНрдд 'рдмреНрд░реЗрдХ'ред рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝рд░ред рд╡рд┐рдВрдбреЛрдЬрд╝ рдлреИрдХреНрдЯрд░рдореЙрдиреНрдЧрд░рдПрд╡реНрдпреВ.рдХреНрд╕ 350

рд╡реИрд╕реЗ, рдПрдХ рд╡рд┐рдзрд┐ рд▓реВрдк рдореЗрдВ рдмрд┐рдирд╛ рд╢рд░реНрдд рдЬрд╛рд░реА рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рд╕рд╛рде рдорд┐рд▓реА (рдпрд╣ рдЙрд╕реА рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рджреНрд╡рд╛рд░рд╛ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛), рд▓реЗрдХрд┐рди рдКрдкрд░ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдереА рдЬреЛ рдпрд╣ рдкреБрд╖реНрдЯрд┐ рдХрд░рддреА рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЕрд╕реНрдерд╛рдпреА рд╕рдорд╛рдзрд╛рди рд╣реИ:

 // TEMPORARY continue; 

рдореБрдЭреЗ рдпрд╛рдж рд╣реИ рдХрд┐ рдмрд┐рдирд╛ рд╢рд░реНрдд рдмреНрд░реЗрдХ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рдкрд╛рд╕ рдРрд╕реА рдХреЛрдИ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВ рдереАред

рдЪрд▓реЛ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред

 internal static DependencyInformation GetDependencyInfo(....) { .... IExpression resultIndex = null; .... if (resultIndex != null) { if (parameter.IsDefined( typeof(SkipIfMatchingIndexIsUniformAttribute), false)) { if (resultIndex == null) throw new InferCompilerException( parameter.Name + " has SkipIfMatchingIndexIsUniformAttribute but " + StringUtil.MethodNameToString(method) + " has no resultIndex parameter"); .... } .... } .... } 

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА : V3022 рдПрдХреНрд╕рдкреНрд░реЗрд╢рди 'resultIndex == null' рд╣рдореЗрд╢рд╛ рдЧрд▓рдд рд╣реЛрддрд╛ рд╣реИред рд╕рдВрдХрд▓рдХ FactorManager.cs 382

рддреБрд░рдВрдд, рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдШреЛрд╖рдгрд╛ рдФрд░ рдЙрдкрд░реЛрдХреНрдд рд╕рддреНрдпрд╛рдкрди рдХреЗ рдмреАрдЪ, resultIndex рдЪрд░ рдХрд╛ рдореВрд▓реНрдп рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЪреЗрдХ resultIndex! = Null рдФрд░ resultIndex == null рдХреЗ рдмреАрдЪ, рдорд╛рди рдкрд╣рд▓реЗ рд╕реЗ рдирд╣реАрдВ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдкрд░рд┐рдгрд╛рдо Index == рдЕрд╢рдХреНрдд рд╣рдореЗрд╢рд╛ рдЧрд▓рдд рд╣реЛрдЧрд╛ , рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдПрдХ рдЕрдкрд╡рд╛рдж рдХрднреА рдирд╣реАрдВ рдлреЗрдВрдХрд╛ рдЬрд╛рдПрдЧрд╛ред

рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдореЗрд░реЗ рд╕реБрдЭрд╛рд╡реЛрдВ рдХреЗ рдмрд┐рдирд╛, рд╕реНрд╡рдпрдВ рдХреЛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд╣реИ, рдПрдХ рд╕рдорд╕реНрдпрд╛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реЗрдХрд┐рди рд╕рд┐рд░реНрдл рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░реВрдВрдЧрд╛ред рд╡рд┐рдзрд┐ рдХреЛрдб рдЫреЛрдЯрд╛ рд╣реИ, рдореИрдВ рдЗрд╕реЗ рдЗрд╕рдХреА рд╕рдВрдкреВрд░реНрдгрддрд╛ рдореЗрдВ рджреВрдВрдЧрд╛ред

 public static Tuple<int, string> ComputeMovieGenre(int offset, string feature) { string[] genres = feature.Split('|'); if (genres.Length < 1 && genres.Length > 3) { throw new ArgumentException(string.Format( "Movies should have between 1 and 3 genres; given {0}.", genres.Length)); } double value = 1.0 / genres.Length; var result = new StringBuilder( string.Format( "{0}:{1}", offset + MovieGenreBuckets[genres[0]], value)); for (int i = 1; i < genres.Length; ++i) { result.Append( string.Format( "|{0}:{1}", offset + MovieGenreBuckets[genres[i].Trim()], value)); } return new Tuple<int, string>(MovieGenreBucketCount, result.ToString()); } 

рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИред рдЗрдирдкреБрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╡рд░реНрдг рджреНрд╡рд╛рд░рд╛ рдкрд╛рд░реНрд╕ рдХреА рдЧрдИ рд╣реИ '|' рдпрджрд┐ рд╕рд░рдгреА рдХреА рд▓рдВрдмрд╛рдИ рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рд╣реИ, рддреЛ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рджреВрд╕рд░реА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ ... genres.Length <1 && genres.Length> 3 ? рдЪреВрдВрдХрд┐ рдХреЛрдИ рд╕рдВрдЦреНрдпрд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рддреБрд░рдВрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ ( [int.MinValue..1) рдФрд░ (3..int.MaxValue] ) рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рдореВрд▓реНрдпреЛрдВ рдХреА рд╕реАрдорд╛ рдореЗрдВ рдЖрддреА рд╣реИ, рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣рдореЗрд╢рд╛ рдЧрд▓рдд рд╣реЛрдЧрд╛ ред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдЪреЗрдХ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рд╕реЗ рд░рдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЕрдкреЗрдХреНрд╖рд┐рдд рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рдлреЗрдВрдХрд╛ рдЬрд╛рдПрдЧрд╛ред

рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реИ: V3022 рдПрдХреНрд╕рдкреНрд░реЗрд╢рди 'genres.Length <1 && genres.Length> 3' рд╣рдореЗрд╢рд╛ рдЧрд▓рдд рд╣реЛрддрд╛ рд╣реИред рд╢рд╛рдпрдж '||' рдСрдкрд░реЗрдЯрд░ рдХреЛ рдпрд╣рд╛рдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореВрд▓реНрдпрд╛рдВрдХрдирдХрд░реНрддрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБред 242

рд╕рдВрджрд┐рдЧреНрдз рд╡рд┐рдЦрдВрдбрди рдСрдкрд░реЗрд╢рди рдорд┐рд▓реЗред

 public static void CreateTrueThetaAndPhi(....) { .... double expectedRepeatOfTopicInDoc = averageDocLength / numUniqueTopicsPerDoc; .... int cnt = Poisson.Sample(expectedRepeatOfTopicInDoc); .... } 

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V3041 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ 'int' рдкреНрд░рдХрд╛рд░ рд╕реЗ 'рдбрдмрд▓' рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдбрд╛рд▓рд╛ рдЧрдпрд╛ рдерд╛ред рдПрдХ рдЖрдВрд╢рд┐рдХ рднрд╛рдЧ рдХреЗ рдиреБрдХрд╕рд╛рди рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдкрд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдПрдХ рдЙрджрд╛рд╣рд░рдг: рдбрдмрд▓ рдП = (рдбрдмрд▓) (рдПрдХреНрд╕) / рд╡рд╛рдИ ;; LDA рдпреВрдЯрд┐рд▓рд┐рдЯреАрдЬ .cs 74

рдпрд╣ рдпрд╣рд╛рдВ рд╕рдВрджреЗрд╣рд╛рд╕реНрдкрдж рд╣реИ: рдкреВрд░реНрдгрд╛рдВрдХ рд╡рд┐рднрд╛рдЬрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЪрд░ рдФрд╕рддрд╡рд┐рдХрд╛рд╕ рдФрд░ рдиреНрдпреВрдордиреАрдХреЙрдЯрд┐рдХреНрд╕рдкреЗрд░рдбреЛрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реЛрддреЗ рд╣реИрдВ), рдФрд░ рдкрд░рд┐рдгрд╛рдо рдЯрд╛рдЗрдк рдбрдмрд▓ рдХреЗ рдПрдХ рдЪрд░ рдХреЛ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рд╢реНрди рдпрд╣ рд╣реИ: рдХреНрдпрд╛ рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рд╡рд┐рднрд╛рдЬрди рдЕрднреА рднреА рдирд┐рд╣рд┐рдд рд╣реИ? рдпрджрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рд░рд┐рдкреЗрдЯрдСрдЙрдЯрдСрдкреНрдЯрд┐рдХрдЗрдВрдирдбреЙрдХ рд╡реИрд░рд┐рдПрдмрд▓ рдЗрдВрдЯ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рд╕реЗ рд╕рдВрднрд╛рд╡рд┐рдд рдкреНрд░рд╢реНрди рд╕рд╛рдл тАЛтАЛрд╣реЛ рдЬрд╛рдПрдВрдЧреЗред

рдЕрдиреНрдп рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ, Poisson.Sample рд╡рд┐рдзрд┐, рдХрд╛ рддрд░реНрдХ рдЬреЛ рд╕рдВрджреЗрд╣рд╛рд╕реНрдкрдж рдЪрд░ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИ ред RepeatOfTopicInDoc , рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рд╣реИред

 int numUniqueWordsPerTopic = Poisson.Sample((double)averageWordsPerTopic); 

рдПрд╡рд░реЗрдЬрдкреНрд░рд┐рд╕рд┐рдкреНрдЯреНрд░реЛрдкрд┐рдХ рдЯрд╛рдЗрдк рдЗрдВрдЯ рдХрд╛ рд╣реИ , рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдкрдпреЛрдЧ рдХреА рдЬрдЧрд╣ рдкрд░ рдбрдмрд▓ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдФрд░ рдпрд╣рд╛рдБ рдЙрдкрдпреЛрдЧ рдХреА рдПрдХ рдФрд░ рдЬрдЧрд╣ рд╣реИ:

 double expectedRepeatOfWordInTopic = ((double)numDocs) * averageDocLength / numUniqueWordsPerTopic; .... int cnt = Poisson.Sample(expectedRepeatOfWordInTopic); 

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЪрд░ рдХреЗ рдореВрд▓ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рдорд╛рди рдирд╛рдо рд╣реИрдВ, рдХреЗрд╡рд▓ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╡рд┐рднрд╛рдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдкреЗрдХреНрд╖рд┐рдд RepeatOfWordInTopic рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ( рджреЛрд╣рд░реЗ рдХреЗ рд▓рд┐рдП numDocs рдХреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рдХрд╛рд░рдг)ред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рд╢реБрд░реБрдЖрддреА рдЬрдЧрд╣ рдкрд░ рджреЗрдЦрдиреЗ рд▓рд╛рдпрдХ рд╣реИ рдЬрд╣рд╛рдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХреА рд╣реИред

рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдпрд╣ рд╕рдВрдкрд╛рджрди рдХреЗ рд▓рд╛рдпрдХ рд╣реИ рдФрд░ рдХреИрд╕реЗ, рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдХреЛрдб рдХреЗ рд▓реЗрдЦрдХреЛрдВ рдХреЛ (рд╡реЗ рдмреЗрд╣рддрд░ рдЬрд╛рдирддреЗ рд╣реИрдВ), рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЖрдЧреЗ рдЬрд╛рдиреЗ рджреЗрдВред рдЕрдЧрд▓реЗ рд╕рдВрджрд┐рдЧреНрдз рд╡рд┐рднрд╛рдЧ рдореЗрдВред

 public static NonconjugateGaussian BAverageLogarithm(....) { .... double v_opt = 2 / 3 * (Math.Log(mx * mz / Ex2 / 2) - m); if (v_opt != v) { .... } .... } 

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V3041 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ 'int' рдкреНрд░рдХрд╛рд░ рд╕реЗ 'рдбрдмрд▓' рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдбрд╛рд▓рд╛ рдЧрдпрд╛ рдерд╛ред рдПрдХ рдЖрдВрд╢рд┐рдХ рднрд╛рдЧ рдХреЗ рдиреБрдХрд╕рд╛рди рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдкрд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдПрдХ рдЙрджрд╛рд╣рд░рдг: рдбрдмрд▓ рдП = (рдбрдмрд▓) (рдПрдХреНрд╕) / рд╡рд╛рдИ ;; рд░рдирдЯрд╛рдЗрдо ProductExp.cs 137

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рдкреВрд░реНрдгрд╛рдВрдХ рд╡рд┐рднрд╛рдЬрди рдХреЗ рд╕рдВрджрд┐рдЧреНрдз рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдлрд┐рд░ рд╕реЗ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛, рдЬреИрд╕рд╛ рдХрд┐ 2 рдФрд░ 3 рдкреВрд░реНрдгрд╛рдВрдХ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рд╢рд╛рдмреНрджрд┐рдХ рд╣реИрдВ, рдФрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 2/3 рдХрд╛ рдкрд░рд┐рдгрд╛рдо 0 рд╣реЛрдЧрд╛ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╕рдВрдкреВрд░реНрдг рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рд░реВрдк рд▓реЗрддрд╛ рд╣реИ:

 double v_opt = 0 * expr; 

рд╕рд╣рдордд рд╣реВрдБ, рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рд╣реИред рдХрдИ рдмрд╛рд░ рдореИрдВ рдЗрд╕ рдЪреЗрддрд╛рд╡рдиреА рдкрд░ рд▓реМрдЯ рдЖрдпрд╛, рдХрд┐рд╕реА рддрд░рд╣ рдХреА рдкрдХрдбрд╝ рдкрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛, рдФрд░ рдЗрд╕реЗ рд▓реЗрдЦ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдпрд╣ рд╡рд┐рдзрд┐ рдЧрдгрд┐рдд рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдлреЙрд░реНрдореВрд▓реЛрдВ рд╕реЗ рднрд░реА рд╣реБрдИ рд╣реИ (рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрд▓рдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛), рдЖрдк рдХрднреА рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдХреНрдпрд╛ рдЙрдореНрдореАрдж рдХреА рдЬрд╛рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рдЙрди рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХреЗ рдЙрддрдиреА рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдБ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдБ рдЬреЛ рдореИрдВрдиреЗ рд▓реЗрдЦ рдореЗрдВ рд▓рд┐рдЦреА рд╣реИрдВ, рдФрд░ рдореИрдВ рдЙрдирдХрд╛ рдмреЗрд╣рддрд░ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣реА рдЙрдирдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реВрдБред

рд▓реЗрдХрд┐рди рдлрд┐рд░ рдпрд╣ рдореБрдЭ рдкрд░ рд╣рд╛рд╡реА рд╣реЛ рдЧрдпрд╛ - рдореБрдЭреЗ 0/3 рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП 0 рдХреЗ рдХрд╛рд░рдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рддреЛ рдпрд╣ рдЬрдЧрд╣ рд╡реИрд╕реЗ рднреА рджреЗрдЦрдиреЗ рд▓рд╛рдпрдХ рд╣реИред

 public static void WriteAttribute(TextWriter writer, string name, object defaultValue, object value, Func<object, string> converter = null) { if ( defaultValue == null && value == null || value.Equals(defaultValue)) { return; } string stringValue = converter == null ? value.ToString() : converter(value); writer.Write($"{name}=\"{stringValue}\" "); } 

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА : V3080 рд╕рдВрднрд╛рд╡рд┐рдд рдЕрд╢рд╛рдВрддрд┐ ред 'рдореВрд▓реНрдп' рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдХрдореНрдкрд╛рдЗрд▓рд░ WriteHelpers.cs 78

рд╣рд╛рд▓рдд рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдХрд╛рдлреА рдЙрдЪрд┐рдд рджрд╛рд╡рд╛ред рдЕрд╢рдХреНрдд рд╕рдВрджрд░реНрдн рдХреА рдбреАрдлреНрд░реЗрдВрд╕рд┐рдВрдЧ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдорд╛рди рдореЗрдВ рд╣реЛ рд╕рдХрддреА рд╣реИред рдорд╛рди (рдбрд┐рдлрд╝реЙрд▓реНрдЯ) рдпрджрд┐ рдорд╛рди == рд╢реВрдиреНрдп рд╣реИ ред рдЪреВрдБрдХрд┐ рдпрд╣ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рд╕рд╣реА рдСрдкрд░реЗрдЯрд░ рдХрд╛ рд╣реИред рдСрдкрд░реЗрдЯрд░, рдЗрд╕реЗ рдХреИрд▓рдХреБрд▓реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╛рдПрдВ рдСрдкрд░реЗрдВрдб рдЭреВрдард╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдХрд┐ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯрд╡реИрд▓реНрдпреВ \ рд╡реИрд▓реНрдпреВ рд╡реИрд░рд┐рдПрдмрд▓ рдЕрд╢рдХреНрдд рди рд╣реЛред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЕрдЧрд░ defaultValue! = Null , рдФрд░ value == null :

  • defaultValue == null -> рдЧрд▓рдд ;
  • defaultValue == null && value == null -> рдЧрд▓рдд ; ( рдореВрд▓реНрдп рдХреА рдЬрд╛рдВрдЪ рдирд╣реАрдВ рд╣реБрдИ)
  • value.Equals (defaultValue) -> NullReferenceException , рдЪреВрдВрдХрд┐ рдорд╛рди рд╢реВрдиреНрдп рд╣реИ ред

рдЖрдЗрдП рдПрдХ рдРрд╕реЗ рд╣реА рдорд╛рдорд▓реЗ рдХреЛ рджреЗрдЦреЗрдВ:

 public FeatureParameterDistribution( GaussianMatrix traitFeatureWeightDistribution, GaussianArray biasFeatureWeightDistribution) { Debug.Assert( (traitFeatureWeightDistribution == null && biasFeatureWeightDistribution == null) || traitFeatureWeightDistribution.All( w => w != null && w.Count == biasFeatureWeightDistribution.Count), "The provided distributions should be valid and consistent in the number of features."); .... } 

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА : V3080 рд╕рдВрднрд╛рд╡рд┐рдд рдЕрд╢рд╛рдВрддрд┐ ред рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ 'traitFeatureWeightDistribution'ред рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдлрд╝реАрдЪрд░рдкреИрд░рдореАрдЯрд░рдбрд┐рд╕реНрдЯреНрд░рд┐рдмреНрдпреВрд╢рди.рдХреЗрдПрд╕ 65

рд╣рдо рдмреВрд▓рд┐рдпрди рдореВрд▓реНрдпреЛрдВ рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рддрд░реНрдХ рдЫреЛрдбрд╝ рдХрд░, рдЕрддрд┐рд░рд┐рдХреНрдд рдлреЗрдВрдХ рджреЗрддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЖрд╕рд╛рди рд╣реЛ:

 (traitFeatureWeightDistribution == null && biasFeatureWeightDistribution == null) || traitFeatureWeightDistribution.All( w => w != null && w.Count == biasFeatureWeightDistribution.Count) 

рдлрд┐рд░ рд╕реЗ, рд╕рд╣реА рд╕рдВрдЪрд╛рд▓рди || рдЗрд╕рдХреА рдЧрдгрдирд╛ рдХреЗрд╡рд▓ рддрднреА рдХреА рдЬрд╛рддреА рд╣реИ рдЬрдм рдмрд╛рдИрдВ рдЧрдгрдирд╛ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЧрд▓рдд рд╣реЛрддрд╛ рд╣реИ ред рдмрд╛рдПрдВ рдСрдкрд░реЗрдВрдб рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ , рдЬрдм traitFeatureWeightDistribution == null рдФрд░ biasFeatureWeightDistribution! = Null рд╢рд╛рдорд┐рд▓ рд╣реИ ред рддрдм рдХреЗ рд╕рд╣реА рдСрдкрд░реЗрдВрдб || рдСрдкрд░реЗрдЯрд░ рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рдПрдЧреА, рдФрд░ traitFeatureWeightDistribution рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╕рднреА рдПрдХ ArgumentNullException рдЙрдард╛рдПрдВрдЧреЗ ред

рдХреЛрдб рдХрд╛ рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдЯреБрдХрдбрд╝рд╛:

 public static double GetQuantile(double probability, double[] quantiles) { .... int n = quantiles.Length; if (quantiles == null) throw new ArgumentNullException(nameof(quantiles)); if (n == 0) throw new ArgumentException("quantiles array is empty", nameof(quantiles)); .... } 

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА : V3095 ' рдХреНрд╡рд╛рдВрдЯрд╛рдЗрд▓реНрд╕ ' рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬрдм рдЗрд╕реЗ рд╢реВрдиреНрдп рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 91, 92. рд░рдирдЯрд╛рдЗрдо рдУрд╡рд░рдПрдЯрд░рдХреНрд╡рд╛рдВрдЯрд╛рдЗрд▓реНрд╕.рдХреЗрдПрд╕ 91

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ quantiles.Length рдкреНрд░реЙрдкрд░реНрдЯреА рдкрд╣рд▓реЗ рдПрдХреНрд╕реЗрд╕ рдХреА рдЬрд╛рддреА рд╣реИ , рдФрд░ рдлрд┐рд░ null рдХреЗ рд▓рд┐рдП рдХреНрд╡рд╛рдВрдЯрд╛рдЗрд▓реНрд╕ рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИред рдирддреАрдЬрддрди, рдЕрдЧрд░ рдХреНрд╡рд╛рдВрдЯрд╛рдЗрд▓реНрд╕ == рдЕрд╢рдХреНрдд рд╣реИ , рддреЛ рд╡рд┐рдзрд┐ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджреЗрдЧреА, рдмрд╕ рдереЛрдбрд╝рд╛ рд╕рд╛ рдЧрд▓рдд рд╣реИ, рдФрд░ рдереЛрдбрд╝рд╛ рдирд╣реАрдВ рдЬрд╣рд╛рдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЙрдиреНрд╣реЛрдВрдиреЗ рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдЧрдбрд╝рдмрдбрд╝ рдХрд░ рджрд┐рдпрд╛ред

рдпрджрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рд╕реНрд╡рдпрдВ рдкрддрд╛ рд▓рдЧрд╛ рд▓рд┐рдпрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЖрдкрдХреЛ рдПрдХ рдХрдк рдХреЙрдлреА рдмрдирд╛рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ рдФрд░ рдиреАрдЪреЗ рджреА рдЧрдИ рд╡рд┐рдзрд┐ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реБрдП рдХрд░рддрдм рджреЛрд╣рд░рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВред рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╡рд┐рдзрд┐ рдХреЗ рдкреВрд░реЗ рдХреЛрдб рдХреЛ рдЙрджреНрдзреГрдд рдХрд░рддрд╛ рд╣реВрдВред

( рдлреБрд▓рд╕рд╛рдЗрдЬрд╝ рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВ )

рдЪрд┐рддреНрд░ 2



рдареАрдХ рд╣реИ, рдареАрдХ рд╣реИ, рдпрд╣ рдПрдХ рдордЬрд╛рдХ рдерд╛ (рдпрд╛ рдХреНрдпрд╛ рдЖрдк рд╕рдлрд▓ рд╣реБрдП?!)ред рдЖрдЗрдП рдХрд╛рд░реНрдп рдХреЛ рдереЛрдбрд╝рд╛ рд╕рд░рд▓ рдХрд░реЗрдВ:

 if (sample.Precision < 0) { precisionIsBetween = true; lowerBound = -1.0 / v; upperBound = -mean.Precision; } else if (sample.Precision < -mean.Precision) { precisionIsBetween = true; lowerBound = 0; upperBound = -mean.Precision; } else { // in this case, the precision should NOT be in this interval. precisionIsBetween = false; lowerBound = -mean.Precision; lowerBound = -1.0 / v; } 

рдХреНрдпрд╛ рдпрд╣ рдмреЗрд╣рддрд░ рд╣реЛ рдЧрдпрд╛ рд╣реИ? рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рдЗрд╕ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХреА: V3008 'рд▓реЛрдЕрд░ рдмрд╛рдЙрдВрдб' рдЪрд░ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рджреЛ рдмрд╛рд░ рдорд╛рди рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдЧрд▓рддреА рд╣реИред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 324, 323. рд░рдирдЯрд╛рдЗрдо рдЧреМрд╕рд┐рдпрдирдУрдк.рд╕реАрдПрд╕ 324

рджрд░рдЕрд╕рд▓, рдЕрдВрддрд┐рдо рджреВрд╕рд░реА рд╢рд╛рдЦрд╛ рдореЗрдВ, рдирд┐рдЪрд▓реА рдЪрд░ рдХрд╛ рдорд╛рди рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рджреЛ рдмрд╛рд░ рд╕реМрдВрдкрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ (рдФрд░ рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП), рдЪрд░ рдЕрдкрд░рдмрд╛рдЙрдВрдб рдХреЛ рдПрдХ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╣рдо рдЖрдЧреЗ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддреЗ рд╣реИрдВред

 private void WriteAucMatrix(....) { .... for (int c = 0; c < classLabelCount; c++) { int labelWidth = labels[c].Length; columnWidths[c + 1] = labelWidth > MaxLabelWidth ? MaxLabelWidth : labelWidth; for (int r = 0; r < classLabelCount; r++) { int countWidth = MaxValueWidth; if (countWidth > columnWidths[c + 1]) { columnWidths[c + 1] = countWidth; } } .... } 

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V3081 рдиреЗрд╕реНрдЯреЗрдб рд▓реВрдк рдХреЗ рдЕрдВрджрд░ 'r' рдХрд╛рдЙрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред 'C' рдХрд╛рдЙрдВрдЯрд░ рдХреЗ рдирд┐рд░реАрдХреНрд╖рдг рдЙрдкрдпреЛрдЧ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред CommandLine ClassifierEvaluationModule.cs 459

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕ рд▓реВрдк рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдЖрдВрддрд░рд┐рдХ рд▓реВрдк - рдЖрд░ - рдХреЗ рдХрд╛рдЙрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ, рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЖрдВрддрд░рд┐рдХ рд▓реВрдк рдХреЗ рд╕рднреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рджреМрд░рд╛рди рд╕рдорд╛рди рддрддреНрд╡реЛрдВ рдкрд░ рдПрдХ рд╣реА рд╕рдВрдЪрд╛рд▓рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЖрдЦрд┐рд░рдХрд╛рд░, рд╕реВрдЪрдХрд╛рдВрдХ рднреА рдмрд╛рд╣рд░реА рд▓реВрдк ( рд╕реА ) рдХреЗ рдХрд╛рдЙрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЖрдВрддрд░рд┐рдХ ( рдЖрд░ ) рдирд╣реАрдВред

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдФрд░ рдХреНрдпрд╛ рджрд┐рд▓рдЪрд╕реНрдк рдкрд╛рдпрд╛ рдЧрдпрд╛ред

 public RegexpFormattingSettings( bool putOptionalInSquareBrackets, bool showAnyElementAsQuestionMark, bool ignoreElementDistributionDetails, int truncationLength, bool escapeCharacters, bool useLazyQuantifier) { this.PutOptionalInSquareBrackets = putOptionalInSquareBrackets; this.ShowAnyElementAsQuestionMark = showAnyElementAsQuestionMark; this.IgnoreElementDistributionDetails = ignoreElementDistributionDetails; this.TruncationLength = truncationLength; this.EscapeCharacters = escapeCharacters; } 

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА : V3117 рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкреИрд░рд╛рдореАрдЯрд░ 'рдпреВрдЬрд╝рд▓реИрдЬрд╝рд▓рдХреНрд╡рд╛рдпрдВрдЯрд┐рдлрд╛рдпрд░' рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд░рдирдЯрд╛рдЗрдо рд░реЗрдЧреЗрдХреНрд╕рдкреЙрд░реНрдорд╛рдЯреЗрдЯрд┐рдВрдЧ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ред 38

рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ --LazyQuantifier рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреА рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рдВрджрд┐рдЧреНрдз рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрдмрдВрдзрд┐рдд рдирд╛рдо рдФрд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд╡рд░реНрдЧ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - UseLazyQuantifier ред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рд╡реЗ рдЗрд╕реА рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рднреВрд▓ рдЧрдПред

рдХрдИ рд╕рдВрднрд╛рд╡рд┐рдд рдЦрддрд░рдирд╛рдХ рдШрдЯрдирд╛ рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рд╕реЗ рдореБрд▓рд╛рдХрд╛рдд рдХреАред рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

 public class RecommenderRun { .... public event EventHandler Started; .... public void Execute() { // Report that the run has been started if (this.Started != null) { this.Started(this, EventArgs.Empty); } .... } .... } 

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V3083 рдЗрд╡реЗрдВрдЯ 'рдЖрд░рдВрдн' рдХрд╛ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдЖрд╣реНрд╡рд╛рди, NullReferenceException рд╕рдВрднрд╡ рд╣реИред рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЛ рдШрдЯрдирд╛ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдЗрд╡реИрд▓реНрдпреВрдПрдЯрд░ рд░рд┐рдХрдореЗрдВрдбрд░рд░реВрди.рдХреЗрдПрд╕ 115

рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЕрд╢рдХреНрдд рдЕрд╕рдорд╛рдирддрд╛ рдФрд░ рд╣реИрдВрдбрд▓рд░ рдХреА рдХреЙрд▓ рдХреЗ рдмреАрдЪ рдХреА рдШрдЯрдирд╛ рдХреЗ рдмреАрдЪ, рдПрдХ рдШрдЯрдирд╛ рдХреЛ рдЕрдирд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдЗрд╕ рд╕рдордп рдЕрд╢рдХреНрдд рдФрд░ рд╣реИрдВрдбрд▓рд░ рдХреА рдХреЙрд▓ рдХреЗ рдмреАрдЪ рдХреА рдШрдЯрдирд╛ рдХреЗ рд╕рджрд╕реНрдп рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдПрдХ NullReferenceException рдХреЛ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдореЗрдВ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд▓рд┐рдВрдХ рдХреЛ рдмрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ '?' рд╕рдВрдЪрд╛рд▓рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХреЛ рдмреБрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдПред

рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдРрд╕реЗ 35 рд╕реНрдерд╛рди рдереЗред

рд╡реИрд╕реЗ, V3024 рдХреА 785 рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдВ рднреА рдорд┐рд▓реАрдВред рд╡рд╛рд░реНрдирд░ V3024 рдХреЛ рдСрдкрд░реЗрдЯрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╕рдордп рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ '! =' рдпрд╛ '=='ред рдореИрдВ рдпрд╣рд╛рдВ рдЗрд╕ рдмрд╛рдд рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреВрдВрдЧрд╛ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рддреБрд▓рдирд╛рдПрдВ рд╣рдореЗрд╢рд╛ рд╕рд╣реА рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВ - рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рд╕реНрдЯреИрдХрдСрд╡рд░рдлреНрд▓реЛ рдХрд╛ рдПрдХ рд▓рд┐рдВрдХ рднреА рд╣реИ (рдпрд╣ рдпрд╣ рд╣реИ)ред

рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд╕реВрддреНрд░ рдФрд░ рдЧрдгрдирд╛ рдЕрдХреНрд╕рд░ рдорд┐рд▓рддреЗ рдереЗ, рдпреЗ рдЪреЗрддрд╛рд╡рдиреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рднреА рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рд▓реЗрд╡рд▓ 3 рдкрд░ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╕рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИрдВ)ред

рдпрджрд┐ рдЖрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реИрдВ рдХрд┐ рдпреЗ рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдБ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИрдВ, рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ рд▓рдЧрднрдЧ рдПрдХ рдХреНрд▓рд┐рдХ рдХреЗ рд╕рд╛рде рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ , рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдСрдкрд░реЗрд╢рди рдХреЛ рдХрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред



рдирд┐рд╖реНрдХрд░реНрд╖


рдХрд┐рд╕реА рддрд░рд╣ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдореИрдВрдиреЗ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рдЬрд╛рдВрдЪ рдкрд░ рд▓реЗрдЦ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдерд╛, рдФрд░ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЫреВрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╕реБрдЦрдж рдерд╛ред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдЗрд╕ рд▓реЗрдЦ рд╕реЗ рдХреБрдЫ рдирдпрд╛ / рдЙрдкрдпреЛрдЧреА рднреА рд╕реАрдЦрд╛ рд╣реИ, рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдЗрд╕реЗ рд░реБрдЪрд┐ рдХреЗ рд╕рд╛рде рдкрдврд╝реЗрдВред

рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕рдорд╕реНрдпрд╛ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рдЬрд▓реНрдж рд╕реБрдзрд╛рд░ рдХрд░реЗрдВ рдФрд░ рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдЧрд▓рддреА рдХрд░рдирд╛ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ, рдлрд┐рд░ рднреА рд╣рдо рд▓реЛрдЧ рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП, рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЬреИрд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдХреНрдпрд╛ рдпрд╛рдж рдХрд░рддрд╛ рд╣реИ, рд╣реИ рдирд╛? рд╡реИрд╕реЗ рднреА - рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рд╢реБрднрдХрд╛рдордирд╛рдПрдВ, рдФрд░ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рдФрд░ рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдПрдХ рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдЕрдзрд┐рдХрддрдо рд▓рд╛рдн рдЗрд╕рдХреЗ рдирд┐рдпрдорд┐рдд рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдСрд▓ рдж рдмреЗрд╕реНрдЯ!



рдпрджрд┐ рдЖрдк рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдЕрдВрдЧреНрд░реЗрдЬреА рдмреЛрд▓рдиреЗ рд╡рд╛рд▓реЗ рджрд░реНрд╢рдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: рд╕рд░реНрдЧреЗрдИ рд╡рд╛рд╕рд┐рд▓рд┐рд╡ред Infer.NET рдХреЛрдб рдореЗрдВ рдЧрд▓рддрд┐рдпрд╛рдБ рдХреНрдпрд╛ рд╣реИрдВ?

Source: https://habr.com/ru/post/hi429578/


All Articles