рдПрдХреНрд╕ = рд╕рд╛рдЗрди (рдП, рдмреА) * рдорд┐рдирдЯ (рдПрдмреНрд╕ (рдП), рдПрдмреНрд╕ (рдмреА)) рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╕рдордп рд╕рд╢рд░реНрдд рд╕рдВрдХреНрд░рдордг рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рдПрдХ рдкреЛрд╕реНрдЯ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ 10 рдмрд╛рд░ред рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕рд╛рд░рд╛рдВрд╢:
- рдЕрдиреБрдХреВрд▓рди рд╕реНрдкрд╖реНрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдХрд╛рд░ рдХрд╛рд▓реНрдкрдирд┐рдХ рд╣реИ: 10 рдмрд╛рд░ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ 2.5 рдЧреБрдирд╛;
- рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП: рдЕрдзреНрдпрдпрди рдХреЗ рддрд╣рдд рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрдЬрд╛рдп рд╕реАрдкреАрдпреВ рд╕реНрдЯрд╛рд▓реЛрдВ, рд░реИрдо рдмреИрдВрдбрд╡рд┐рдбреНрде, рдЖрджрд┐ рдХреЛ рди рдорд╛рдкреЗрдВ;
- рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП: рдЕрдиреНрдпрдерд╛ рд╡реЗ рдмреЗрддрд╣рд╛рд╢рд╛ рдХрд╛рдВрдк рд╕рдХрддреЗ рд╣реИрдВ;
- рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗрд╡рд▓ рд╢рд╛рдВрдд рд╕реЗрдЯ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рд╡реНрдпрд░реНрде рдореЗрдВ рдЫреЛрдЯреЗ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдкрд░: + 0.5% рдЧрддрд┐, -15% рдШрдмрд░рд╛рдирд╛;
- рдЖрдкрдХреЛ рдЬрд╛рдВрдЪ рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдорд╛рдкрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рдЗрд╕реЗ, рд╕рд╣реА рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рд╣реИ;
- рдкреНрд░рддрд┐рд╢рдд рдХреЛ рдЧрд░реНрдо рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдиреНрдпреВрдирддрдо рдПрди / рд╕реЗрдХрдВрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдХреЗрд╡рд▓ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЖрдк рдХрдВрдкрдХрдВрдкреА рдХреЛ рджреВрд░ рдХрд░рддреЗ рд╣реИрдВ;
- рдЖрдкрдХреЛ SSE рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╣ рдЙрд╕рдХреЗ рд╕рд╛рде 8.6 рдЧреБрдирд╛ рдирд┐рдХрд▓рд╛, рдФрд░ рдХреЛрдб ... рдкрдврд╝рд╛ рдЧрдпрд╛ред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдлрд┐рд░ рд╕реЗ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдореЗрдВ рд╢рд╛рд╕реНрддреНрд░реАрдп рдкрджреНрдзрддрд┐ рд╕рдВрдмрдВрдзреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ред рдХреМрди рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдРрд╕реА рдЧрд▓рддрд┐рдпрд╛рдБ, рд╡рд┐рд╡рд░рдг, рд╡рд┐рд╕реНрддреГрдд рдбреАрдмреНрд░реАрдлрд┐рдВрдЧ, рдЕрдиреБрдХреВрд▓рди рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдмрд╛рд░ рдХреИрд╕реЗ рди рдХрд░реЗрдВ рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд, рдХрдЯреМрддреА рдХреЗ рддрд╣рдд рд╕реНрд░реЛрдд рдХреЛрдбред
рдореИрдВрдиреЗ рдХрд▓
рдореВрд▓ рдкреЛрд╕реНрдЯ рдкрдврд╝реА, рдореИрдВ 10 рдмрд╛рд░ рдХреЗ рддреНрд╡рд░рдг рдХреЗ рдХрд╛рд░рдг рдмрд╣реБрдд рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдерд╛, рд╕рдВрдХреНрд░рдордг рдХреЗ рдЙрдиреНрдореВрд▓рди рдХреЗ рдХрд╛рд░рдг, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рд┐рдВрдЯрд┐рдкрд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рднреАред рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИ, рд╕рдВрдХреНрд░рдордг рдорд╣рдВрдЧреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрддрдирд╛ рдирд╣реАрдВред рдореИрдВрдиреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рд╕реЗ рджреЗрдЦрд╛, рдФрд░ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ: рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдкрджреНрдзрддрд┐ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдмрд╛рд▓рд╡рд╛рдбрд╝реА рдХреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ! рдЦреИрд░, рдпрд╣ рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ рдЬреБрджрд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ, рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдгред
рддреНрд░реБрдЯрд┐ # 1 рдпрд╣ рд╣реИ рдХрд┐
рджрд┐рдП рдЧрдП рд╕реНрд░реЛрдд рдХреЛрдб рдмреЗрд╡рдХреВрдлреА рд╕реЗ рдХреБрдЫ рднреА рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдо рдХреЗ рдпреЛрдЧ llrr () рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╕рдВрдХрд▓рдХ рджреЗрдЦрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рди рдХрд░рдиреЗ рдХрд╛ рд╣рд░ рдЕрдзрд┐рдХрд╛рд░ рд╣реИред рдореИрдВрдиреЗ рдЕрднреА-рдЕрднреА рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореВрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рдХрд╛рд╢рд┐рдд (рдЕрдм рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛) рдЕрдиреБрдХреВрд▓рди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдиреЗ рдмрд┐рд▓реНрдХреБрд▓ рдЧрд▓рдд рдкрд░рд┐рдгрд╛рдо рдорд╛рдирд╛, рдФрд░ рдпрд╣ рдЕрджреГрд╢реНрдп рдерд╛ред рдУрд╣ ...
Moral # 1: рд▓рдбрд╝рдХреЛрдВ, рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ, рд╣рдореЗрд╢рд╛ред рдЖрдк рддреБрд░рдВрдд рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкрдХрдбрд╝ рд▓реЗрдВрдЧреЗ, рдФрд░ рд╕рдВрдХрд▓рдХ "рдЕрдирд╛рд╡рд╢реНрдпрдХ" рд▓реВрдк рдХреЛ рдмрд╛рд╣рд░ рдирд╣реАрдВ рдлреЗрдВрдХреЗрдВрдЧреЗред рдпрд╣ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдЕрд╕реНрдерд┐рд░ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рднреА рдорджрдж рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЕрднреА рднреА рдЗрд╕реЗ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рддреНрд░реБрдЯрд┐ # 2 рдпрд╣ рд╣реИ рдХрд┐ рд▓реЗрдЦрдХ рд░реИрдВрдб () + llr () рд▓реВрдк рдХреЛ рдорд╛рдкрддрд╛ рд╣реИ, рдлрд┐рд░ рд░реИрдВрдб () + llr2 () рд▓реВрдк рдХреЛ рдорд╛рдкрддрд╛ рд╣реИ, рдлрд┐рд░ рд░рдирдЯрд╛рдЗрдо рдХреЛ рд╣рд╛рде рд╕реЗ рдФрд░ рдЖрдВрдЦ рд╕реЗ рдШрдЯрд╛рддрд╛ рд╣реИред рдпрд╣ рджреЛ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдПрдХ рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред рд░реИрдВрдб рдмрд╣реБрдд рдзреАрдорд╛ рд╣реИ, рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдЕрдиреБрдЪрд┐рдд рд░реВрдк рд╕реЗ рд▓рдВрдмрд╛ рд╣реИред ;) рдЗрд╕ рдмрд╛рд░ред рдкреНрд░рдпреЛрдЧ рдореЗрдВ, рджреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рднрд░рд╛рдИ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдорд╛рдкрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рднрд░рд╛рдИ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡рд╛рдВрдЫрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд▓реНрдж рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпреЗ рджреЛ рд╣реИрдВред
рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐ рдореЗрдВ, "рдП + рдмреА" рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рднрд░рд╛рдИ рдХреЛ рдорд╛рдкрдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдЕрдиреБрдкрдпреБрдХреНрдд рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрдХрд▓рдХ
рдЧрдгрдирд╛ рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ "рдП" рдорд╛рдкрд╛ рдЧрдпрд╛ рдлрд╝рдВрдХреНрд╢рди B рдХреЗ рдЙрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдлрд╝рдВрдХреНрд╢рди A рдореЗрдВ рдЫрд┐рдкрд╛рддрд╛ рд╣реИ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдо рдмреА рд╕реЗ рдЕрдЬреНрдЮрд╛рдд рднрд╛рдЧ рдХреЛ рдорд╛рдкрддреЗ рд╣реИрдВред рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ рдЬрдм A + B рдПрдХ рд▓рдбрд╝рд╛рдХреВ рдЬреЛрдбрд╝реА рд╣реИ рдЬреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд░реИрдВрдб () рдЬреИрд╕реЗ рдП рдЯреЗрд╕реНрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдмрдЬрд╛рдп рдпрд╣ рдмреБрд░рд╛ рд╣реИред
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдорд┐рд╢реНрд░рдг рдШрдЯрд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, call_rand () рдбрд┐рд╕реНрдорд╛рд╕реНрдорд╛ рдореЗрдВ, рдЗрд╕реЗ рдЗрдирд▓рд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЗ рдмрд┐рдирд╛, рд▓реЗрдХрд┐рди рдЬрд╛рд╣рд┐рд░ рд╣реИ рдХрд┐ рдХреБрдЫ рдФрд░ рджреБрд░реНрднрд╛рдЧреНрдп рд╣реИред рдХреМрди рд╕рд╛, рдореИрдВ рдирд╣реАрдВ рд╕рдордЭрддрд╛, рд▓реЗрдХрд┐рди рд╕реАрдкреАрдпреВ рд╕реНрдЯрд╛рд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣реА рдкрд░рд┐рдХрд▓реНрдкрдирд╛ред рдкрд░рд┐рдХрд▓реНрдкрдирд╛ рдпрд╣ рд╣реИ рдХрд┐ llr () рдЧрдгрдирд╛ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдереЛрдбрд╝реА рджреЗрд░реА рдХрд░рдХреЗ, рдЬреЛ рдХрд┐ рдкрд░реАрдХреНрд╖рдг esi, esi рдЕрдиреБрджреЗрд╢ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ esi рд╕рд┐рд░реНрдл рд░реИрдВрдб () рд╕реЗ рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ рд╣реИ, рд╣рдо рдореВрд▓ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЛ рдЧрддрд┐ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрд╕реА рд╕рдордп, рдЪрдХреНрд░ рдХреЛ 2 рдмрд╛рд░ рджреЛрд╣рд░рд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рдПрдХ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдЧрдгрдирд╛рдУрдВ рдХреЛ рдлреИрд▓рд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ:
10.7 рд╕реЗрдХрдВрдб, рд░реИрдВрдб ()
13.3 рд╕реЗрдХрдВрдб, рд░реИрдВрдб () + llr ()
12.6 рд╕реЗрдХрдВрдб, рд░реИрдВрдб () + llr () + 2x рдЕрдирд░реЛрд▓
// 2x unroll , 13.3 sec int a = rand() - RAND_MAX / 2; int b = rand() - RAND_MAX / 2; x += LLR(a,b); a = rand() - RAND_MAX / 2; b = rand() - RAND_MAX / 2; x += LLR(a,b); // 2x unroll c , 12.6 sec int a = rand() - RAND_MAX / 2; int b = rand() - RAND_MAX / 2; int a2 = rand() - RAND_MAX / 2; int b2 = rand() - RAND_MAX / 2; x += LLR(a,b); x += LLR(a2,b2);
рдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ, 12.8 рд╕реЗрдХрдВрдб рддрдХ рддреНрд╡рд░рдг рдЖрдо рддреМрд░ рдкрд░ рдмреЗрд╡рдХреВрдл рдбрд╛рд▓рдиреЗ asm {nop} рджреНрд╡рд╛рд░рд╛ x + = LLR (рдП, рдмреА) рд╕реЗ рдкрд╣рд▓реЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рддрд░рд╣ рдХреЗ рдЪрдорддреНрдХрд╛рд░ рдХреЛ рдЖрддреНрдорд╡рд┐рд╢реНрд╡рд╛рд╕ рд╕реЗ рджреЛрд╣рд░рд╛рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛ред рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдмреЗрддрд░рддреАрдм рдЙрддрд╛рд░-рдЪрдврд╝рд╛рд╡ред рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рднрд╛рд░реА рд░реИрдВрдб () рдФрд░ рд▓рд╛рдЗрдЯ рдПрд▓рдЖрд░рдЖрд░ () рд╕реЗ рднрд░рд╛рдИ рдХреЛ рдорд╛рдкрдирд╛ рдПрдХ рд╡реНрдпрд╡рд╕рд╛рдп, рд╣рдореНрдо, рдЧреИрд░-рддреБрдЪреНрдЫ рд╣реИред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдЯреЗрд╕реНрдЯ / рдЬреЗрдПрдХреНрд╕рдПрдХреНрд╕ рдЗрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рдкреЗрдпрд░ рдореЗрдВ рд╕реНрдЯреЙрд▓ рд╣реЛрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХреЛ рд╕рд┐рд░реНрдл рдЧрд┐рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЬрд┐рд╕ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╣рд╛рде рдореЗрдВ рд╡реАрдЯреНрдпреВрди рд╣реИ, рд╡рд╣ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рджреЗрдЦ рдкрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВред
Moral # 2: рд▓рдбрд╝рдХреЛрдВ, рдЬрд╛рдВрдЪ рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдФрд░ рд╕рд┐рдВрдереЗрдЯрд┐рдХреНрд╕ рд╕реЗ рдХреАрдорд╛ рдмрдирд╛рдпрд╛ рд╣реБрдЖ рдорд╛рдВрд╕ рди рдорд╛рдкреЗрдВ, рдХреЗрд╡рд▓ рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдорд╛рдкреЗрдВ рдЬрд┐рд╕рдХреА рдЖрдкрдХреЛ рдЬрд╝рд░реВрд░рдд рд╣реИред рдХрдВрдкрд╛рдЗрд▓рд░ рдЙрд╕ рднрд░рд╛рдИ рдХреЛ рдХреИрд╕реЗ рдорд┐рд▓рд╛рдПрдЧрд╛ рдФрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ рдХреНрдпрд╛ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рднрд╛рд╡ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛, рдЕрдиреБрдорд╛рди рдирд╣реАрдВред
рд╣рдо рдмреНрд░реЗрдХрд┐рдВрдЧ рд░реИрдВрдб () рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд▓реЗрддреЗ рд╣реИрдВ, рдкреНрд░рддрд┐ рдЪрдХреНрд░ рд░реИрдВрдбрдо рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдПрдХ рдкрд░реНрдпрд╛рдкреНрдд рдмрдбрд╝реЗ рдмреНрд▓реЙрдХ рдХреА рдкреВрд░реНрд╡-рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЪрдХреНрд░ рдХреЗ рдЕрдВрджрд░ рд╣рдо рдХреЗрд╡рд▓ рдЧрдгрдирд╛ рдФрд░ рд╕рдВрдХреНрд╖реЗрдк llr () рдЫреЛрдбрд╝рддреЗ рд╣реИрдВред рдХреБрд▓ рдореЗрдВ, рд╣рдо рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдореЗрдореЛрд░реА рддрдХ рдкрд╣реБрдВрдЪ рдХреЗ рд▓рд┐рдП рдПрдХ рдУрд╡рд░рд╣реЗрдб рдорд╛рдкрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд░реИрдЦрд┐рдХ рдкрдврд╝рдиреЗ рдХреЗ рд╕рд╛рде рдпрд╣ рдиреНрдпреВрдирддрдо рд╣реИред рдЕрдЪрд╛рдирдХ, 10 рдмрд╛рд░ рдХреЗ рдХрд╛рд▓реНрдкрдирд┐рдХ рддреНрд╡рд░рдг рдХреЗ рдмрдЬрд╛рдп, рд╣рдо 2.5 рдЧреБрдирд╛ рдорд╛рдореВрд▓реА рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рддреНрд╡рд░рдг рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВред
рдареАрдХ рд╣реИ, рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдореНрдореАрджреЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рдкрд░реНрдпрд╛рдкреНрдд рддреЗрдЬреА рд╕реЗ рдФрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ;)
SSE рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИред рдореЗрд░реЗ рдбреЗрд╕реНрдХрдЯреЙрдк рдкрд░ рдПрдХ рдирдпрд╛ Core2Duo E8500 рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдпрд╣ SSE4 рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣рдо 4 рдмрд╛рд░ рдЪрдХреНрд░ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдПрдХ рдмрд╛рд░ рдореЗрдВ 4 рдЬреЛрдбрд╝реЗ рдЧрд┐рдирддреЗ рд╣реИрдВред рд╕реАрдзреЗ рдорд╛рдереЗ рдкрд░ рд╣рдо рд╕рд╛рдЗрди, рдПрдмреНрд╕ рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
1.073 рд╕реЗрдХрдВрдб, llr () рдмреЗрд╕рд▓рд╛рдЗрди
0.438 рд╕реЗрдХрдВрдб, llr2 () рдЕрдиреБрдХреВрд▓рд┐рдд, 2.5x
0.125 рд╕реЗрдХрдВрдб, llr4 () sse + 4x unroll, 8.6x
рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рдХреЛрдб рдмрд╣реБрдд рдкрдардиреАрдп рд╣реИред рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ _mm_sign_epi32 () рдкрд░ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╡рд╣ рдЕрдЪрд╛рдирдХ 2 рддрд░реНрдХ рднреА рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ 1 рддрд░реНрдХ рдХреЗ рд╕рдВрдХреЗрдд рд╕реЗ рдЧреБрдгрд╛ рдХрд░рддрд╛ рд╣реИред рдЖрдкрдХреЛ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП рджреВрд╕рд░рд╛, рдЬрдмрдХрд┐ _mm_sign (0) = 0, 1 рдирд╣реАрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЪрд╛рд╣реЗрдВрдЧреЗред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдорд╛рд░реЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИ, рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ abs (a) рдпрд╛ abs (b) 0 рд╣реИ, рддреЛ * min (abs) = 0 рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░реЗрдВ, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИред
static inline __m128i LLR4(const int * pa, const int * pb) { __m128i a = *(__m128i*)pa; __m128i b = *(__m128i*)pb;
рд╕реАрдорд╛рдВрдд рдиреЛрдЯ: рджрд┐рд▓рдЪрд╕реНрдк рд░реВрдк рд╕реЗ, рд░рдЬрд┐рд╕реНрдЯрд░ рдШрдЯрдХреЛрдВ рдХреЛ _mm_hadd_epi32 рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░реЗрдВ рддрд╛рдХрд┐ рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рдЕрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдФрд░ рдлрд┐рд░ 4 рд╕рд╛рдорд╛рдиреНрдп рдЗрдирдЯреНрд╕ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдкрд░рд┐рдгрд╛рдо рдЙрддреНрдкрдиреНрди рди рд╣реЛред рдХрд╛рд╢ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдХрдо рд╕реЗ рдХрдо рдХрд╣реАрдВ рдкрд░, рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдПрдЪрдб рдХрд╛ рдкреНрд░рднрд╛рд╡ рджреЗрдЦрд╛ рдерд╛ред
рдПрдХ рдФрд░ рдиреЛрдЯ: рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рдЪрдХреНрд░ рдХрд╛ рдЖрдЧреЗ рд╡рд┐рдХрд╛рд╕
рднреА рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореЗрдореЛрд░реА рдкрдврд╝рдиреЗ рдХреА рдЧрддрд┐ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рд▓рдЧрднрдЧ 6.4 рдЬреАрдмреА / рд╕реЗрдХреЗрдВрдб рдЖрддрд╛ рд╣реИред
рддреНрд░реБрдЯрд┐ # 3 , рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ, рдпрд╣ рд╣реИ рдХрд┐ SSE рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХрд┐рд╕реА рдХрд╛рд░рдг рдХреЗ рд╕рднреА рдмрд╣рд╛рджреБрд░ рдЕрдиреБрдХреВрд▓рди рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ i386 рдХреЗ рд▓рд┐рдП рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдпрд╣ рдПрдХ рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж рдирд┐рд╖реНрдХрд░реНрд╖ рд╣реИ, рдореИрдВрдиреЗ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдЗрд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реИ рдпрд╛ рдХреИрд╕реЗред рдпрд╣ "рдЧрд▓рддреА" рд╣реИ рдпрд╛ рдирд╣реАрдВ? рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдРрд╕рд╛ рд╕реЛрдЪрддрд╛ рд╣реВрдВред рдХреНрдпреЛрдВрдХрд┐ рдЕрдЧрд░ рдЖрдк рдЕрдиреБрдХреВрд▓рди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдмрд╣реБрдд рдмрдбрд╝рд╛! Kamenti рдореЗрдВ рд╡рд┐рджреНрд╡рд╛рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЬреАрдд рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдирд╣реАрдВ рд╣реИред рдЖрдЦрд┐рд░рдХрд╛рд░, рдпрд╣ рд╕рдВрд╕реНрдХрд░рдг рд╡реЗрдХреНрдЯрд░рдХреГрдд рд╣реИ рдФрд░ рдПрдХ рд╕рдордп рдореЗрдВ 4 рдЬреЛрдбрд╝реЗ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдореВрд▓ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрд╕рдВрдЧрдд рдкрд░рд┐рд╡рд░реНрддрди рд╣реИред I386 рдХреЗ рд▓рд┐рдП рдкреНрд▓рд╕ рдЕрдиреБрдХреВрд▓рди рднреА рдмрд╣реБрдд рдореВрд▓реНрдпрд╡рд╛рди рд╣реИрдВ, рдЕрдЪрд╛рдирдХ рдХрд╛рд░реНрдпрдХреНрд░рдо i7 рдкрд░ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдЖрдИрдЯреА рдкреБрд░рд╛рддрддреНрд╡ рдХреЗ рд╕реНрдорд╛рд░рдХ рдкрд░ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐,
рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдиреИрддрд┐рдХрддрд╛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рдорд╛рди рд╣реИред
Moral # 3: рд▓рдбрд╝рдХреЛрдВ, рдЕрдм 2013, SSE4 рд▓рдЧрднрдЧ рд╣рд░ рдЬрдЧрд╣ рд╣реИ, SSE2 рд╣рд░ рдЬрдЧрд╣ рд╣реИ, рддрджрдиреБрд╕рд╛рд░ рдХрд╛рд░реНрдп рдХрд░реЗрдВ, 99% рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рди (рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ), рдФрд░ 1% рдХрдордмреИрдХ рдирд╣реАрдВред
рдкрд░рд┐рдгрд╛рдореА SSE рд╕рдВрд╕реНрдХрд░рдг рдЕрдм рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╕рд╢рдХреНрдд рд╣реИ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рд▓реЙрдиреНрдЪреЛрдВ рдкрд░ рд╕рдордп 0.125 рд╕реЗ 0.145 рд╕реЗрдХрдВрдб рддрдХ рдХреИрд╕реЗ рдиреГрддреНрдп рдХрд░рддрд╛ рд╣реИред рд▓рдЧрднрдЧ 20% рдЕрдВрддрд░ред рдУрд╣ ...
рддреНрд░реБрдЯрд┐ # 4 рд╕рд┐рд░реНрдл рдЕрдиреБрдХреВрд▓рди рдХреЗ рдХрд╛рд░рдг рдкреНрд░рдХрдЯ рд╣реБрдИ;) рдереНрд░реЗрдб рдХреА рдЙрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЛ рд╕реЗрдЯ рдХрд░рдирд╛ рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд▓рдЧрднрдЧ 0.5% рдЙрддреНрдкрд╛рджрдХрддрд╛ рджреЗрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ
рдШрдмрд░рд╛рдирд╛ рд╕реЗ рдорд╛рдк рдХреЛ рдмрдЪрд╛рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдкреНрд░реЛрд╕реЗрд╕рд░ рдЖрд╡реГрддреНрддрд┐ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рддреБрд░рдВрдд рдЗрд╕реЗ рд╡рд╛рдкрд╕ рд╣рд╛рд╕рд┐рд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╡рд╣ 0.1 рд╕реЗрдХрдВрдб рдореЗрдВ рдирд╣реАрдВ, 10+ рд╕реЗрдХрдВрдб рдореЗрдВ рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИред рджреВрд╕рд░рд╛, рднрд▓реЗ рд╣реА рдЖрдк 100 рдмрд╛рд░
рд▓рдШреБ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдкреНрд░рддреНрдпреЗрдХ рдЕрд▓рдЧ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд╛ рд╕рдордп рдЕрднреА рднреА рдиреГрддреНрдп рдХрд░реЗрдЧрд╛ред рд╢реБрд░реБрдЖрдд рдореЗрдВ рдФрд░ рдЗрди 100 рд░рдиреЛрдВ рдХреЗ рдЕрдВрдд рдореЗрдВ рджреЛрдиреЛрдВред рдЖрдк рдХрднреА рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ 99% рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХреЗ рд╕рд╛рде рдПрдХ рдХрдерд┐рдд рдирд┐рд╖реНрдХреНрд░рд┐рдп рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдпрд╣ рдЕрднреА рднреА рдЕрдкрдиреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ "рд╡рд╛рд░реНрдо рдЕрдк" рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рднреА (рдХрд╛рдлреА рдХрдо) рд░рди рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдмрд╕ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдФрд░ рдФрд╕рдд рдХрд░рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ, рдХреБрд▓ рд╕рдордп рдЕрднреА рднреА рдХрд╛рдВрдк рд░рд╣рд╛ рд╣реИред рдкрд╣рд▓рд╛ "рдардВрдбрд╛" рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рдмрд╛рд╣рд░ рдлреЗрдВрдХрдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ, рдкрд░рд┐рдгрд╛рдо рдХрд╛рдВрдк рд░рд╣рд╛ рд╣реИред рдЖрдк рдФрд╕рдд рдФрд░ рд╡рд┐рдЪрд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдЙрдЯрд▓реЗрд░ рдХреЛ рдлреЗрдВрдХ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдПрдмреНрд╕ (рдореВрд▓реНрдп-рдореАрди)> = k * stddev, рдлрд┐рд░ рдФрд╕рдд рдХреЛ рдкреБрдирд░реНрдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рдореИрдВрдиреЗ рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдВрдк рд░рд╣рд╛ рд╣реИ!
рдФрд░ рдХрдо рд╕реЗ рдХрдо, рдРрд╕реА рд╕рд░рд▓ рд╡рд┐рдзрд┐ рдХрд╛рдВрдкрддреА рд╣реИ: рд╣рдо рдХрдИ рд░рди рдмрдирд╛рддреЗ рд╣реИрдВ (рдореИрдВ 10 рд░рди рдХрд░рддрд╛ рд╣реВрдВ) рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рд░рди рдХреЗ рд▓рд┐рдП
рдиреНрдпреВрдирддрдо рд╕рдордп рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдиреНрдпреВрдирддрдо рд╕реНрдерд╛рди рдкрд░ рдирд┐рд╣рд┐рдд рд╣реИ, рдХрдИ рдкреНрд░рдХреНрд╖реЗрдкрдгреЛрдВ рдореЗрдВ рдЕрдВрддрд░ рдЕрдзрд┐рдХрддрдо 0.5% рд╣реИред
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ: рдпреЗ рд░рди 3-10 рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╡рд╛рд░реНрдо-рдЕрдк рдХреЗ
рдЕрд▓рд╛рд╡рд╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ 10 * 0.1 = 1 рд╕реЗрдХрдВрдб рдлрд┐рд░ рд╕реЗ рдЯреНрд░реЗрди рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдФрд░, рдиреНрдпреВрдирддрдо рдХреЗ рд╕рд╛рде рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рд╕рдордп рдЕрднреА рднреА рдХрд╛рдВрдк рдЬрд╛рдПрдЧрд╛ред рдпрд╛ 10 рд░рди рд╕реЗ рдЕрдзрд┐рдХ (рдЬреЛрд░рджрд╛рд░) рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдмрд╣реБрдд рдкрд╣рд▓реЗ рд╕рдВрджрд░реНрдн рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕ рддрд░рд╣ рдХреЗ рд╡рд╛рд░реНрдо-рдЕрдк рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдмреЗрдВрдЪ (рдЯреЗрд╕реНрдЯ 1) рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рд╕реЗрдВрдЯ рд╡рд┐рдЯрд╕ рдХреЗ рдирд╛рдо рдкрд░ рдиреГрддреНрдп рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдЧрд╛ред рдЙрдлрд╝, рдереНрд░реЙрдЯрд▓рд┐рдВрдЧ рд╕реНрдЯрд╛рдЗрд▓!
Moral # 4: рд▓рдбрд╝рдХреЛрдВ, рдкреНрд░рддрд┐рд╢рдд рдХреЛ рдХрдо рд╕реЗ рдХрдо 3 рд╕реЗрдХрдВрдб рдФрд░ рдЕрдзрд┐рдорд╛рдирддрдГ 10 рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рдЧрд░реНрдо рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрдо рд╕реЗ рдХрдо N рд░рди рдЧрд┐рдирддреЗ рд╣реИрдВред
рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЗ рд╕рд╛рде, рдЖрдк рдЕрднреА рднреА рдмрд╣реБрдд рд╕рд╛рд░реА рдЧрд▓рддрд┐рдпрд╛рдБ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╢рд╛рдпрдж рдЕрдВрддрд┐рдо рдХреЛрдб рдореЗрдВ (рд╡реИрд╕реЗ, рдпрд╣рд╛рдБ рдпрд╣ рд╣реИ:
gist.github.com/anonymous/5605201 ) рдХреБрдЫ рдФрд░ рдпрд╛рдж рдЖ рд░рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдЬ рд╣рдордиреЗ рдЗрдиреНрд╣реЗрдВ рд╣рд▓ рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмреЗрдХрд╛рд░ рдирд╣реАрдВ рд╣реИред
рд╕рддрд░реНрдХ рд░рд╣реЗрдВ, рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдорд╛рдкреЗрдВ, рджрдпрд╛ рдХреЗ рдмрд┐рдирд╛ рдФрд░ рдЕрдВрдд рддрдХ рдЕрдиреБрдХреВрд▓рди рдХрд░реЗрдВ;)