рдбрд┐рд╡реАрдЬрди рдЖрдзреБрдирд┐рдХ рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЗрдВ рд╕рдмрд╕реЗ рдорд╣рдВрдЧрд╛ рд╕рдВрдЪрд╛рд▓рди рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдЖрдкрдХреЛ рдкреНрд░рдорд╛рдг рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рджреВрд░ рдирд╣реАрдВ рдЬрд╛рдирд╛ рдкрдбрд╝реЗрдЧрд╛: рдПрдЧреНрдирд░ рдлреЙрдЧ [
1 ] рдХрд╛ рдкреНрд░рд╕рд╛рд░рдг рд╣реИ рдХрд┐ рдЗрдВрдЯреЗрд▓ / рдПрдПрдордбреА рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░ рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ 25-119 рдШрдбрд╝реА рдЪрдХреНрд░реЛрдВ рдореЗрдВ рд▓реЗрдЯреЗрдВрд╕реА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдкрд╛рд░рд╕реНрдкрд░рд┐рдХ рдереНрд░реВрдкреБрдЯ - 25-120ред рд░реВрд╕реА рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд -
рдзреАрдореА ! рдлрд┐рд░ рднреА, рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ рд╡рд┐рднрд╛рдЬрди рдирд┐рд░реНрджреЗрд╢ рд╕реЗ рдмрдЪрдиреЗ рдХрд╛ рдПрдХ рдЕрд╡рд╕рд░ рд╣реИред рдФрд░ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЖрдзреБрдирд┐рдХ рд╕рдВрдХрд▓рдХ рдореЗрдВ (рд╡реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 20 рд╕рд╛рд▓ рд╕реЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ), рдФрд░ рдореИрдВ рдпрд╣ рднреА рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдЬреНрдЮрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЛрдб рдХреЛ рдмреЗрд╣рддрд░, рддреЗрдЬ, рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ: рдпрджрд┐ рд╡рд┐рднрд╛рдЬрдХ рдХреЛ рд╕рдВрдХрд▓рди рдЪрд░рдг рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкреВрд░реНрдгрд╛рдВрдХ рд╡рд┐рднрд╛рдЬрди рдХреЛ рдЧреБрдгрд╛ рдФрд░ рджрд╛рдИрдВ рдУрд░ рдПрдХ рддрд╛рд░реНрдХрд┐рдХ рдмрджрд▓рд╛рд╡ рдХреЗ рд╕рд╛рде рдмрджрд▓рдирд╛ рд╕рдВрднрд╡ рд╣реИ (рдФрд░ рдХрднреА-рдХрднреА рдЖрдк рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ)ред рдпрд╣ рдмрд╣реБрдд рдЙрддреНрд╕рд╛рд╣рдЬрдирдХ рд▓рдЧрддрд╛ рд╣реИ: рдкреВрд░реНрдгрд╛рдВрдХ рдЧреБрдгрди рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдФрд░ рджрд╛рдИрдВ рдУрд░ рдПрдХ рдмрджрд▓рд╛рд╡, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрдВрдЯреЗрд▓ рд╣реИрд╕рд╡реЗрд▓ 5 рд╕реЗ рдЕрдзрд┐рдХ рдШрдбрд╝реА рдЪрдХреНрд░ рдирд╣реАрдВ рд▓реЗрдЧрд╛ред рдпрд╣ рдХреЗрд╡рд▓ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ рдХрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреВрд░реНрдгрд╛рдВрдХ рд╡рд┐рднрд╛рдЬрди рдХреЛ 10 рд╕реЗ рдХрд░рдХреЗ, рдкреВрд░реНрдгрд╛рдВрдХ рдЧреБрдгрди рджреНрд╡рд╛рд░рд╛ рд╕рдорд╛рди рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рджрд╛рдИрдВ рдУрд░ рдПрдХ рддрд╛рд░реНрдХрд┐рдХ рдмрджрд▓рд╛рд╡ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдП? рдЗрд╕ рд╕рд╡рд╛рд▓ рдХрд╛ рдЬрд╡рд╛рдм рд╕рдордЭ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реИ ... рдлрд┐рдХреНрд╕реНрдб рдкреНрд╡рд╛рдЗрдВрдЯ рдЕрдВрдХрдЧрдгрд┐рдд (рдЗрд╕рдХреЗ рдмрд╛рдж рдПрдлрдкреАрдП)ред рдереЛрдбрд╝реА рд╕реА рдореВрд▓ рдмрд╛рддреЗрдВред
рдПрдлрдкреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдкреНрд░рддрд┐рдкрд╛рджрдХ (рдШрд╛рддрд╛рдВрдХ 2 => рд╕рдВрдЦреНрдпрд╛ рдХреЗ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдВ рдмрд┐рдВрджреБ рдХреА рд╕реНрдерд┐рддрд┐) рдХреЛ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдирд╣реАрдВ рдмрдЪрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЕрд╕реНрдерд╛рдпреА рдмрд┐рдВрджреБ рдЕрдВрдХрдЧрдгрд┐рдд рдХреЗ рд╡рд┐рдкрд░реАрдд, IEE754 рджреЗрдЦреЗрдВ), рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдХреБрдЫ рдРрд╕реЗ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдЬреНрдЮрд╛рдд рдорд╛рддреНрд░рд╛ рдХреЗ рд▓рд┐рдП рд╕рд╣рдордд рд╣реИрдВред рдХреЗрд╡рд▓ рдордВрдЯрд┐рд╕рд╛ (рджрд╢рдорд▓рд╡ рдмрд┐рдВрджреБ рдХреЗ рдмрд╛рдж рдЬреЛ рдЖрддрд╛ рд╣реИ) рдмрд░рдХрд░рд╛рд░ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг:
0.1=.0001100110011001(1001)...рдПрдлрдкреА,рдПрдХреНрд╕рдк=0
0.1 - рдмрд╛рдЗрдирд░реА рдиреЛрдЯреЗрд╢рди рдореЗрдВ рдЗрд╕рдХрд╛ 'рдЕрдирдВрдд рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡' рд╣реИ, рдЬреЛ рдКрдкрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХреЛрд╖реНрдардХ рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдпрд╣ рд╣рд┐рд╕реНрд╕рд╛ рд╕рдордп-рд╕рдордп рдкрд░ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, 0.1 рдХреЗ рдмрд╛рдЗрдирд░реА рдПрдлрдкреА рдиреЛрдЯреЗрд╢рди рдореЗрдВ рдПрдХ рджреВрд╕рд░реЗ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддреЗ рд╣реБрдПредрдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдпрджрд┐ рд╣рдо FP рдирдВрдмрд░ рд╕рдВрдЪрдп рдХреЗ рд▓рд┐рдП 16-рдмрд┐рдЯ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╕рдЯреАрдХрддрд╛ рдЦреЛрдП рдмрд┐рдирд╛ рдРрд╕реЗ рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рдирдВрдмрд░ 0.1 рдХреЗ FP рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЛ рдлрд┐рдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдмрджрд▓реЗ рдореЗрдВ рдЙрди рд╕рднреА рдЖрдЧреЗ рдХреА рдЧрдгрдирд╛ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдЗрд╕ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд╛ рдореВрд▓реНрдп рд╢рд╛рдорд┐рд▓ рд╣реИред
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдореЗрдВ 16-рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХ A рдФрд░ B рдХрд╛ 16-рдмрд┐рдЯ рдЕрдВрд╢ рднрд╛рдЧ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред A рджреНрд╡рд╛рд░рд╛ B рдХрд╛ рдЧреБрдгрдирдлрд▓ рдкреВрд░реНрдгрд╛рдВрдХ рд╡рд╛рд▓реЗ рднрд╛рдЧ рдореЗрдВ 16 рдмрд┐рдЯреНрд╕ рдХреЗ рд╕рд╛рде рдФрд░ рдЖрдВрд╢рд┐рдХ рдмрд┐рдЯреНрд╕ рдореЗрдВ 16 рдмрд┐рдЯреНрд╕ рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИред рдХреЗрд╡рд▓ рдкреВрд░реНрдгрд╛рдВрдХ рднрд╛рдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЖрдкрдХреЛ рдкрд░рд┐рдгрд╛рдо рдХреЛ 16 рдмрд┐рдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ рджрд╛рдИрдВ рдУрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдмрдзрд╛рдИ рд╣реЛ, рдПрдлрдкреАрдП рд╕реЗ рдкрд░рд┐рдЪрдп рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИред
рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рдХрд▓реНрдкрдирд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ: рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рд╡рд┐рднрд╛рдЬрди рдХреЛ 10 рд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╡рд┐рднрд╛рдЬреНрдп рд╕рдВрдЦреНрдпрд╛ рдХреЛ 0.1 рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдПрдлрдкреА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╕реЗ рдЧреБрдгрд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдкреВрд░реНрдгрд╛рдВрдХ рднрд╛рдЧ рдФрд░ рджреНрд░рд╡реНрдп рдХреЛ рд╣реИрдЯ рдореЗрдВ рд▓реЗрдирд╛ рд╣реЛрдЧрд╛ ... рдПрдХ рдорд┐рдирдЯ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ ... рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдкрд░рд┐рдгрд╛рдо рд╕рд╣реА рд╣реЛрдЧрд╛, рдФрд░ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдЗрд╕рдХрд╛ рдкреВрд░реНрдгрд╛рдВрдХ рднрд╛рдЧ? - рдЖрдЦрд┐рд░рдХрд╛рд░, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реА рд╕реНрдореГрддрд┐ рдореЗрдВ рдХреЗрд╡рд▓ рд╕рдВрдЦреНрдпрд╛ 0.1 рдХрд╛ рдЕрдиреБрдорд╛рдирд┐рдд рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИред рдиреАрдЪреЗ рдореИрдВрдиреЗ рдирдВрдмрд░ 0.1 рдХреЗ рддреАрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд▓рд┐рдЦреЗ: рдирдВрдмрд░ 0.1 рдХрд╛ рдПрдХ рдЕрд╕реАрдо рд░реВрдк рд╕реЗ рд╕рдЯреАрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡, рдмрд┐рдирд╛ рд░рд╛рдЙрдВрдбрд┐рдВрдЧ рдХреЗ 16 рд╡реАрдВ рдмрд┐рдЯ рдХреЗ рдмрд╛рдж рдЫрдВрдЯрдиреА, рдирдВрдмрд░ 0.1 рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡, рдФрд░ рд░рд╛рдЙрдВрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде 16 рд╡реЗрдВ рдмрд┐рдЯ рдХреЗ рдмрд╛рдж рдЫрдВрдЯрдиреА, рдирдВрдмрд░ 0.1 рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ред
0001100110011001ред10011001....тИТрдЕрдирдВрддрдкрд░рд┐рд╢реБрджреНрдзрддрд╛\ред:режреж:режрез :резрежрежрезрезрежрежрезрезрежрежрез|рез:режреж :режрежрежреж....тИТtruncating "|рдмрд┐рдирд╛рдЧреЛрд▓рд╛рдИ 0001100110011010=00000000....тИТрдЯреНрд░рдВрдХрдЯрд┐рдВрдЧрдХреЗрд╕рд╛рдердЧреЛрд▓рд╛рдИрдЕрдк
рдЖрдЗрдП рд╣рдо рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рддреЗ рд╣реИрдВ рдХрд┐ рд╕рдВрдЦреНрдпрд╛ 0.1 рдХреЗ рдирд┐рд░реВрдкрдг рдХреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ:
infinityрдкрд░рд┐рд╢реБрджреНрдзрддрд╛тИТtruncatingwithoutrounding=0.6тИЧ2тИТ16truncatingwith:roundingupтИТinfinityрдкрд░рд┐рд╢реБрджреНрдзрддрд╛=0.1тИЧ214
0.1 рдХреЗ рдЕрдиреБрдорд╛рди рджреНрд╡рд╛рд░рд╛ рдкреВрд░реНрдгрд╛рдВрдХ рднрд╛рдЧ рдХреЛ рдЧреБрдгрд╛ рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд▓рд┐рдП рд╕рдЯреАрдХ рдкреВрд░реНрдгрд╛рдВрдХ рднрд╛рдЧ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдпрд╣ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
IntegerPart(AтИЧ0.1)=IntegerPart(AтИЧ(0.1+0.1тИЧ2тИТ14),
рдпрд╛
IntegerPart(AтИЧ0.1)=IntegerPart(AтИЧ(0.1+0.6тИЧ2тИТ16)
рдкрд╣рд▓реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ: рдЬрдм
0.1тИЧ2тИТ14тИЧрдП<0.1 рд╣рдореЗрдВ рд╣рдореЗрд╢рд╛ рдкрд╣рдЪрд╛рди рдорд┐рд▓рддреА рд╣реИ (рд▓реЗрдХрд┐рди, рдЖрдкрдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдврд╛рдВрдЪреЗ рдореЗрдВ рд╕рднреА рдирд┐рд░реНрдгрдп рдкрд░реНрдпрд╛рдкреНрдд рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИрдВ)ред рд╣рд▓, рд╣рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ
A<214 ред рдпрд╣реА рд╣реИ, рдХрд┐рд╕реА рднреА 14-рдмрд┐рдЯ рд╕рдВрдЦреНрдпрд╛ рдП рдХреЛ рдЧреБрдгрд╛ рдХрд░рдХреЗ, 0.1 рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЛ рдЧреЛрд▓ рдХрд░рдХреЗ, рд╣рдореЗрдВ рд╣рдореЗрд╢рд╛ рд╕рдЯреАрдХ рдкреВрд░реНрдгрд╛рдВрдХ рднрд╛рдЧ рдорд┐рд▓рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рд╣рдо рдЕрд╕реАрдо рд░реВрдк рд╕реЗ 0.1 рд╕реЗ рдП рд╕реЗ рдЧреБрдгрд╛ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред рд▓реЗрдХрд┐рди, рдХрдиреНрд╡реЗрдВрд╢рди рджреНрд╡рд╛рд░рд╛, рд╣рдо 16-рдмрд┐рдЯ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЧреБрдгрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ , рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЙрддреНрддрд░ рдЧрд▓рдд рд╣реЛрдЧрд╛ рдФрд░ рд╣рдо 0.1 рдЧреБрдгрд╛ рдХрд░рдХреЗ рд╕рд░рд▓ рдЧреБрдгрд╛ рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдЕрдм, рдЕрдЧрд░ рд╣рдо рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ 0.1 рдХреЗ 16 рдмрд┐рдЯреНрд╕ рдХреЗ рдПрдлрдкреА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЛ рдмрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди, рдХрд╣рддреЗ рд╣реИрдВ, 19, 20, рддреЛ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реЛрдЧрд╛ред рдФрд░ рдЖрдЦрд┐рд░ рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ!
рд╣рдо рдмрд╛рдЗрдирд░реА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЛ рдзреНрдпрд╛рди рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ - 0.1 рд░рд╛рдЙрдВрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЯреНрд░рдВрдХрдЯрд┐рдВрдЧ: рдЙрдЪреНрдЪрддрдо рддреАрди рдмрд┐рдЯреНрд╕ рд╢реВрдиреНрдп рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╡реЗ рдЧреБрдгрд╛ рдкрд░рд┐рдгрд╛рдо (рдирдП рдмрд┐рдЯреНрд╕) рдореЗрдВ рдХреЛрдИ рдпреЛрдЧрджрд╛рди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
рдирддреАрдЬрддрди, рд╣рдо рдЕрдкрдиреЗ рдирдВрдмрд░ рдХреЛ рдмрд╛рдИрдВ рдУрд░ рддреАрди рдмрд┐рдЯреНрд╕, рд░рд╛рдЙрдВрдб рдЕрдк рдФрд░ рджрд╛рдИрдВ рдУрд░ рдЧреБрдгрди рдФрд░ рддрд╛рд░реНрдХрд┐рдХ рд╢рд┐рдлреНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдкрд╣рд▓реЗ 16 рд╕реЗ рдФрд░ рдлрд┐рд░ 3 (рдпрд╛рдиреА, рдЖрдорддреМрд░ рдкрд░ 19 рд╕реЗ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдмреЛрд▓рдХрд░) рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рд╣рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд, рд╕рдЯреАрдХ рдкреВрд░реНрдгрд╛рдВрдХ рднрд╛рдЧ рдорд┐рд▓рддрд╛ рд╣реИред ред рдЗрд╕ рддрд░рд╣ рдХреЗ '19' рдмрд┐рдЯ рдЧреБрдгрд╛ рдХреА рд╢реБрджреНрдзрддрд╛ рдХрд╛ рдкреНрд░рдорд╛рдг рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рд╕рдорд╛рди рд╣реИ, рдПрдХрдорд╛рддреНрд░ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ 16-рдмрд┐рдЯ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕реА рддрд░рд╣ рдХреА рддрд░реНрдХ рднреА рдЕрдзрд┐рдХ рдХреНрд╖рдорддрд╛ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рд╕рдЪ рд╣реИ, рдФрд░ рди рдХреЗрд╡рд▓ 10 рд╕реЗ рд╡рд┐рднрд╛рдЬрди рдХреЗ рд▓рд┐рдПред
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рд▓рд┐рдЦрд╛ рд╣реИ рдХрд┐, рдЖрдо рддреМрд░ рдкрд░ рдмреЛрд▓рддреЗ рд╣реБрдП, рдЖрдк рдмрд┐рдирд╛ рдХрд┐рд╕реА рдмрджрд▓рд╛рд╡ рдХреЗ рдЦреБрдж рдХреЛ рдЧреБрдгрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдорд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреИрд╕реЗ? рдЕрд╕реЗрдореНрдмрд▓рд░ x86 / x64 рдбреНрд░рдо рдкрд░:
рдЖрдзреБрдирд┐рдХ рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЗрдВ, рдПрдХ MUL рдХрдорд╛рдВрдб рд╣реЛрддрд╛ рд╣реИ (IMUL, MULX - BMI2 рдХреЗ рднреА рдПрдирд╛рд▓реЙрдЧ рд╣реЛрддреЗ рд╣реИрдВ), рдЬреЛ рдХрд┐ рдПрдХ, 32/64-рдмрд┐рдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╣рддрд╛ рд╣реИ, 64/128 рдмрд┐рдЯ рдЧреБрдгрд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рджреЛ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдореЗрдВ рднрд╛рдЧреЛрдВ рдХреА рдмрдЪрдд рд╣реЛрддреА рд╣реИ (рдЙрдЪреНрдЪ 32/64 рдмрд┐рдЯреНрд╕) рдФрд░ рдпреБрд╡рд╛, рдХреНрд░рдорд╢рдГ):
MUL RCX ; RCX RAX, (128 ) RDX:RAX
рдХреБрдЫ рдкреВрд░реНрдгрд╛рдВрдХ 62-рдмрд┐рдЯ A рдХреЛ RCX рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдФрд░ 64-рдмрд┐рдЯ FA рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЛ рд░рд╛рдЙрдВрдбрд┐рдВрдЧ рдирдВрдмрд░ 0.1 рд╕реЗ рд░рд╛рдЙрдВрдбрд┐рдВрдЧ рдХрд░рддреЗ рд╣реБрдП RAX рд░рдЬрд┐рд╕реНрдЯрд░ (рд╕реВрдЪрдирд╛ рдореЗрдВ рдХреЛрдИ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░) рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПред 64-рдмрд┐рдЯ рдЧреБрдгрди рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдкрд░рд┐рдгрд╛рдо рдХреЗ рдЙрдЪреНрдЪрддрдо 64 рдмрд┐рдЯреНрд╕ рдХреЛ рдЖрд░рдбреАрдПрдХреНрд╕ рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╛, рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рдкреВрд░реНрдгрд╛рдВрдХ рднрд╛рдЧ, рдЬреЛ 62 рдмрд┐рдЯ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рд╕рдЯреАрдХ рд╣реЛрдЧрд╛ред рдпрд╣реА рд╣реИ, рджрд╛рдИрдВ рдУрд░ рд╢рд┐рдлреНрдЯ (SHR, SHRX) рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреА рдкрд╛рд░реА рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреА рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЛ рд▓реЛрдб рдХрд░рддреА рд╣реИ, рднрд▓реЗ рд╣реА рдпрд╣ OOOE рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ: рдХрдо рд╕реЗ рдХрдо рдЗрд╕ рддрд░рд╣ рдХреА рдирд┐рд░реНрднрд░рддрд╛ (рдЙрд░реНрдл рдирд┐рд░реНрднрд░рддрд╛ рд╢реНрд░реГрдВрдЦрд▓рд╛) рдХреА рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рдВрдмреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдирд┐рд░реНрднрд░рддрд╛ рд╣реИред рдФрд░ рдпрд╣рд╛рдБ, рдпрд╣ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЖрдзреБрдирд┐рдХ рд╕рдВрдХрд▓рдХ, рдлреЙрд░реНрдо__рдЯрд╛рдЗрдЧрд░ / 10 рдХреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╡рд┐рднрд╛рдЬреНрдп рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рдкреВрд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд▓рд┐рдП рдХреЛрдбрд╛рдВрддрд░рдХ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВред рдпрд╣реА рд╣реИ, рдпрджрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╣рдореЗрд╢рд╛ 53-рдмрд┐рдЯ рд╕рдВрдЦреНрдпрд╛ рд╣реИ (рдпрд╣ рдареАрдХ рдЗрд╕реА рддрд░рд╣ рд╕реЗ рдореЗрд░реЗ рдХрд╛рдо рдореЗрдВ рдерд╛), рддреЛ рдЖрдкрдХреЛ рдЕрднреА рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рдмрджрд▓рд╛рд╡ рдХрд╛ рдирд┐рд░реНрджреЗрд╢ рдорд┐рд▓рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди, рдЕрдм рдЬрдм рдЖрдк рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк рд╕рдВрдХрд▓рдХ рдХреА рджрдпрд╛ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд┐рдП рдмрд┐рдирд╛, рд╡рд┐рднрд╛рдЬрди рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдЧреБрдгрд╛ рдХреЗ рд╕рд╛рде рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рд╡реИрд╕реЗ, C ++ рдХреЛрдб рдореЗрдВ 64-рдмрд┐рдЯ рдЙрддреНрдкрд╛рдж рдХреЗ рдЙрдЪреНрдЪ рдмрд┐рдЯреНрд╕ рдХреЛ mulh рдЬреИрд╕реА рдЪреАрдЬ рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ Asm рдХреЛрдб рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдКрдкрд░ рджрд┐рдП рдЧрдП {I} MUL {X} рдирд┐рд░реНрджреЗрд╢ рдХреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╢рд╛рдпрдж рдЕрдиреБрдмрдВрдзреЛрдВ рдХреЗ рдЖрдЧрдорди рдХреЗ рд╕рд╛рде (рд╕реА ++ 20 рдореЗрдВ рд╣рдо рдЗрдВрддрдЬрд╛рд░ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ) рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕реБрдзрд╛рд░ рд╣реЛрдЧрд╛, рдФрд░ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╣рдо рдХрд╛рд░ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ! рдпрджреНрдпрдкрд┐ рдпрд╣ C ++ рд╣реИ, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ - рдЕрдиреНрдпрдерд╛ рдирд╣реАрдВред
рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рддрд░реНрдХ - рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рдХрд┐рд╕реА рднреА рднрд╛рдЬрдХ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдФрд░ рдиреАрдЪреЗ рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ:
[рез] https://www.agner.org/optimize/instruction_tables.pdf[реи] рдПрдЧрдирд░ рдлреЙрдЧ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬрд╕реНрд╡реА[рей] рдЗрдВрдЯреЗрд▓ / рдПрдПрдордбреА / рдПрдЖрд░рдПрдо рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рд╡рд╛рд▓рд╛ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдЪреИрдирд▓[рек] рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд┐рднрд╛рдЬрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рд▓реЗрдХрд┐рди рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ