рдПрд░рд▓рд╛рдВрдЧ рдореЗрдВ рдордирдорд╛рдиреА рдкрд░рд┐рд╢реБрджреНрдзрддрд╛ рдХреЗ рдЕрдВрдХрдЧрдгрд┐рдд


@rawpixel


рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕реНрдХреВрд▓реА рдмрдЪреНрдЪреЛрдВ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рддрдереНрдп рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рдорд┐рдд рджрд╢рдорд▓рд╡ рдЕрдВрд╢ рдмрд╛рдЗрдирд░реА рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдПрдХ рдкрд░рд┐рдорд┐рдд рдЕрдВрд╢ рдирд╣реАрдВ рд╣реИред рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг, рдлреНрд▓реЛрдЯ рдФрд░ рдбрдмрд▓ рдкрд░ рдСрдкрд░реЗрд╢рди рд╕рдЯреАрдХ рдирд╣реАрдВ рд╣реИрдВред


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


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




рдорд╛рдирдХреЛрдВ, рдорд╛рдирдХреЛрдВ, рдорд╛рдирдХреЛрдВ ...


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


  • рдПрдХрд▓-рд╕рдЯреАрдХ 32 рдмрд┐рдЯреНрд╕
  • рдбрдмрд▓-рд╕рдЯреАрдХ 64 рдмрд┐рдЯреНрд╕
  • рдПрдХрд▓-рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдкрд░рд┐рд╢реБрджреНрдзрддрд╛> = 43 рдмрд┐рдЯреНрд╕ (рд╢рд╛рдпрдж рд╣реА рдХрднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)
  • рдбрдмрд▓-рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдкрд░рд┐рд╢реБрджреНрдзрддрд╛> = 79 рдмрд┐рдЯреНрд╕ (рдЖрдорддреМрд░ рдкрд░ 80 рдмрд┐рдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)
    рдФрд░ рдЪрд╛рд░ рджреМрд░ рдореЛрдб:
  • рдЧреЛрд▓рд╛рдИ, рдирд┐рдХрдЯрддрдо рдкреВрд░реЗ рдореЗрдВ рдЭреБрдХрд╛рд╡ред
  • рд░рд╛рдЙрдВрдбрд┐рдВрдЧ рдХрд╛ рд░реБрдЭрд╛рди рд╢реВрдиреНрдп рддрдХред
  • рд░рд╛рдЙрдВрдбрд┐рдВрдЧ рдХреА рдкреНрд░рд╡реГрддреНрддрд┐ + + рддрдХ
  • рдЧреЛрд▓рд╛рдИ -тИЮ рдХреА рдУрд░

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


рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, IEEE754 рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рдВрдЦреНрдпрд╛ рдПрдХ рдкрд░рд┐рдорд┐рдд рд╕реЗрдЯ рд╣реИ рдЬрд┐рд╕ рдкрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдПрдХ рдЕрдирдВрдд рд╕реЗрдЯ рдореИрдк рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореВрд▓ рд╕рдВрдЦреНрдпрд╛ рдХреЛ IEEE754 рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рдПрдХ рдкрд░рд┐рдорд┐рдд рд╕реЗрдЯ рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдиреЗ рдкрд░ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдереЛрдХ рдореЗрдВ рдПрдХ рд╕реНрдерд┐рд░ рдФрд░ рдЫреЛрдЯреА рд╕рд╛рдкреЗрдХреНрд╖ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИред рддреЛ, рдлреНрд▓реЛрдЯ рдХреЗ рд▓рд┐рдП рдпрд╣ 11.920928955078125e-6% рд╣реИ, рдФрд░ рдбрдмрд▓ рдХреЗ рд▓рд┐рдП - 2.2204460492503130808472633361816e-14% рд╣реИред рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдЬреАрд╡рди рдореЗрдВ, рдЕрдзрд┐рдХрд╛рдВрд╢ рд░реЛрдЬрдорд░реНрд░рд╛ рдХреЗ рдХрд╛рд░реНрдп рдЬрд┐рдиреНрд╣реЗрдВ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╣рдореЗрдВ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреА рдЙрдкреЗрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╕рд╛рдзрд╛рд░рдг рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рднреА рдЖрдк рд░реЗрдХ рдкрд░ рдХрджрдо рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдкреВрд░реНрдг рддреНрд░реБрдЯрд┐ рдХрд╛ рдкрд░рд┐рдорд╛рдг рдХреНрд░рдорд╢рдГ рдлреНрд▓реЛрдЯ рдФрд░ рдбрдмрд▓ рдХреЗ рд▓рд┐рдП 10 31 рдФрд░ 302 рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЧрдгрдирд╛ рдореЗрдВ рдХрдард┐рдирд╛рдИ рд╣реЛ рд╕рдХрддреА рд╣реИред


рдкреНрд░рднрд╛рд╡ рдЪрд┐рддреНрд░рдг


рд╕рд╛рдорд╛рдиреНрдп рдЬрд╛рдирдХрд╛рд░реА рд╕реЗ рд▓реЗрдХрд░ рд╡реНрдпрд╡рд╕рд╛рдп рддрдХред рдЖрдЗрдП рдПрд░реНрд▓реИрдВрдЧ рдореЗрдВ рдЙрднрд░рддреЗ рдкреНрд░рднрд╛рд╡реЛрдВ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред


рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд╕рднреА рдЙрджрд╛рд╣рд░рдг рд╕реАрдЯреА-рдЯреЗрд╕реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рд╣реИрдВред


рдЧреЛрд▓рд╛рдИ рдФрд░ рд╕рдЯреАрдХрддрд╛ рдХреА рд╣рд╛рдирд┐


рдХреНрд▓рд╛рд╕рд┐рдХреНрд╕ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ - рджреЛ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдЬреЛрдбрд╝: 0.1 + 0.2 = ?:


t30000000000000004(_)-> ["0.30000000000000004"] = io_lib:format("~w", [0.1 + 0.2]). 

рдЬреЛрдбрд╝ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╕рд╣рдЬ рд░реВрдк рд╕реЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рдПрдХ рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реИ, рдФрд░ рдкрд░реАрдХреНрд╖рдг рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЧреБрдЬрд░рддрд╛ рд╣реИред рдЖрдЗрдП рд╕рд╣реА рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред EAPA рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░реАрдХреНрд╖рдг рдлрд┐рд░ рд╕реЗ рдХрд░реЗрдВ:


 t30000000000000004_eapa(_)-> %% prec = 1 symbols after coma X = eapa_int:with_val(1, <<"0.1">>), Y = eapa_int:with_val(1, <<"0.2">>), <<"0.3">> = eapa_int:to_float(1, eapa_int:add(X, Y)). 

рдпрд╣ рдкрд░реАрдХреНрд╖рдг рднреА рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИ рд╣реИред
рдЪрд▓рд┐рдП рдкреНрд░рдпреЛрдЧ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ, 1.0 рдореЗрдВ рдмрд╣реБрдд рдХрдо рдореВрд▓реНрдп рдЬреЛрдбрд╝реЗрдВ:


 tiny(_)-> X = 1.0, Y = 0.0000000000000000000000001, 1.0 = X + Y. 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реА рд╡реГрджреНрдзрд┐ рдкрд░ рдХрд┐рд╕реА рдХрд╛ рдзреНрдпрд╛рди рдирд╣реАрдВ рдЧрдпрд╛ред рд╣рдо рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рджрд░реНрд╢рд╛рддреЗ рд╣реБрдП - рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕реНрдХреЗрд▓рд┐рдВрдЧ:


 tiny_eapa(_)-> X1 = eapa_int:with_val(1, <<"1.0">>), X2 = eapa_int:with_val(25, <<"0.0000000000000000000000001">>), <<"1.0000000000000000000000001">> = eapa_int:to_float(eapa_int:add(X1, X2)). 

рдмрд┐рдЯ рдЧреНрд░рд┐рдб рдУрд╡рд░рдлреНрд▓реЛ


рдЫреЛрдЯреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдЬреБрдбрд╝реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдорд╕реНрдпрд╛ рд╣реИред


 float_overflow(_) -> 1.0 = 9007199254740991.0 - 9007199254740990.0, 1.0 = 9007199254740992.0 - 9007199254740991.0, 0.0 = 9007199254740993.0 - 9007199254740992.0, 2.0 = 9007199254740994.0 - 9007199254740993.0. 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдкрд░реАрдХреНрд╖рдг рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░ рдЕрдВрддрд░ 1.0 рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдирд╛ рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред EAPA рднреА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╣рд▓:


 float_overflow_eapa(_)-> X11 = eapa_int:with_val(1, <<"9007199254740992.0">>), X21 = eapa_int:with_val(1, <<"9007199254740991.0">>), <<"1.0">> = eapa_int:to_float(1, eapa_int:sub(X11, X21)), X12 = eapa_int:with_val(1, <<"9007199254740993.0">>), X22 = eapa_int:with_val(1, <<"9007199254740992.0">>), <<"1.0">> = eapa_int:to_float(1, eapa_int:sub(X12, X22)), X13 = eapa_int:with_val(1, <<"9007199254740994.0">>), X23 = eapa_int:with_val(1, <<"9007199254740993.0">>), <<"1.0">> = eapa_int:to_float(1, eapa_int:sub(X13, X23)). 

рдЦрддрд░рдирд╛рдХ рдХрдореА


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


рд╣рдо рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдПрд░реНрд▓реИрдВрдЧ рдореЗрдВ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдореМрдЬреВрдж рд╣реИ:


 reduction(_)-> X = float(87654321098765432), Y = float(87654321098765431), 16.0 = XY. %% has to be 1.0 

рдпрд╣ рдЕрдкреЗрдХреНрд╖рд┐рдд 1.0 рдХреЗ рдмрдЬрд╛рдп 16.0 рдирд┐рдХрд▓рд╛ред рдЖрдЗрдП рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:


 reduction_eapa(_)-> X = eapa_int:with_val(1, <<"87654321098765432">>), Y = eapa_int:with_val(1, <<"87654321098765431">>), <<"1.0">> = eapa_int:to_float(eapa_int:sub(X, Y)). 

Erlang рдореЗрдВ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдЕрдВрдХрдЧрдгрд┐рдд рдХреА рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ


рдирдХрд╛рд░рд╛рддреНрдордХ рд╢реВрдиреНрдп рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред


 eq(_)-> true = list_to_float("0.0") =:= list_to_float("-0.0"). 

рдХреЗрд╡рд▓ рдпрд╣ рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ EAPA рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрдирд╛рдП рд░рдЦрддрд╛ рд╣реИ:


 eq_eapa(_)-> X = eapa_int:with_val(1, <<"0.0">>), Y = eapa_int:with_val(1, <<"-0.0">>), true = eapa_int:eq(X, Y). 

рдЪреВрдВрдХрд┐ рдпрд╣ рдорд╛рдиреНрдп рд╣реИред Erlang рдореЗрдВ NaN рдФрд░ рд╢рд┐рд╢реБрдУрдВ рдХреА рд╕реНрдкрд╖реНрдЯ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдФрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдХрдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЬрдиреНрдо рджреЗрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпреЗ:


 1> math:sqrt(list_to_float("-0.0")). 0.0 

рдЕрдЧрд▓рд╛ рдмрд┐рдВрджреБ рдмрдбрд╝реА рдФрд░ рдЫреЛрдЯреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред рдЪрд▓реЛ рдЫреЛрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рдЬрдирди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ:


 2> list_to_float("0."++lists:duplicate(322, $0)++"1"). 1.0e-323 3> list_to_float("0."++lists:duplicate(323, $0)++"1"). 0.0 

рдФрд░ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП:


 4> list_to_float("1"++lists:duplicate(308, $0)++".0"). 1.0e308 5> list_to_float("1"++lists:duplicate(309, $0)++".0"). ** exception error: bad argument 

рдпрд╣рд╛рдБ рдЫреЛрдЯреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдФрд░ рдЙрджрд╛рд╣рд░рдг рджрд┐рдП рдЧрдП рд╣реИрдВ:


 6> list_to_float("0."++lists:duplicate(322, $0)++"123456789"). 1.0e-323 7> list_to_float("0."++lists:duplicate(300, $0)++"123456789"). 1.23456789e-301 

 8> 0.123456789e-100 * 0.123456789e-100. 1.524157875019052e-202 9> 0.123456789e-200 * 0.123456789e-200. 0.0 

рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг Erlang рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рддреНрдп рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рддреЗ рд╣реИрдВ: IEEE754 рдореЗрдВ рдзрди рдХреА рдЧрдгрдирд╛ рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреАред


EAPA (рдПрд░реНрд▓рд╛рдВрдЧ рдЖрд░рдВрдЧрд╡рд░реНрде-рдкреНрд░рд┐рд╕рд┐рдЬрди рдЕрд░рд┐рдердореЗрдЯрд┐рдХ)


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


  1. IEEE754 рдХреЛрдбрд┐рдВрдЧ рдХреЗ рдкреНрд░рднрд╛рд╡ рдХрд╛ рдЕрднрд╛рд╡
  2. рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕рдорд░реНрдерди
  3. 126 рджрд╢рдорд▓рд╡ рд╕реНрдерд╛рдиреЛрдВ рддрдХ рд╡рд┐рдиреНрдпрд╛рд╕ рдпреЛрдЧреНрдп рд╕рдЯреАрдХрддрд╛ред (рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ)
  4. Avtoskeyling
  5. рд╕рдВрдЦреНрдпрд╛рдУрдВ рдкрд░ рд╕рднреА рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди
  6. рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рдкреВрд░реНрдг рдкрд░реАрдХреНрд╖рдг, рд╕рдВрдкрддреНрддрд┐ рдЖрдзрд╛рд░рд┐рдд рд╕рд╣рд┐рддред

eapa_int рдЗрдВрдЯрд░рдлрд╝реЗрд╕:


  • with_val/2 - рдПрдХ рдлреНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рдирдВрдмрд░ рдХрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ, json, xml рдореЗрдВред
  • to_float/2 - рдХрд┐рд╕реА рдирд┐рд╢реНрдЪрд┐рдд рд╕рдЯреАрдХрддрд╛ рдХреЗ рд╕рд╛рде рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рдирдВрдмрд░ рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд-рдмрд┐рдВрджреБ рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдЕрдиреБрд╡рд╛рджред
  • to_float/1 - рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рдирдВрдмрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд-рдмрд┐рдВрджреБ рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░реЗрдВред
  • add/2 - рджреЛ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдпреЛрдЧ
  • sub/2 - рдЕрдВрддрд░
  • mul/2 - рдЧреБрдгрди
  • divp/2 - рд╡рд┐рднрд╛рдЬрди
  • min/2 - рд╕рдВрдЦреНрдпрд╛ рдХреА рдиреНрдпреВрдирддрдо
  • max/2 - рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рдЕрдзрд┐рдХрддрдо
  • eq/2 - рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рд╕рдорд╛рдирддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ
  • lt/2 - рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рд╕рдВрдЦреНрдпрд╛ рдХрдо рд╣реИ
  • lte/2 - рдмрд░рд╛рдмрд░ рд╕реЗ рдХрдо рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛
  • gt/2 - рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рд╕рдВрдЦреНрдпрд╛ рдЕрдзрд┐рдХ рд╣реИ
  • gte/2 - рдЬрд╛рдБрдЪ рдмрд░рд╛рдмрд░ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ

EAPA рдХреЛрдб рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА https://github.com/Vonmo/eapa рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ


рдЖрдкрдХреЛ eapa_int рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдм рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХрд╛ рдЖрд╡реЗрджрди рдкреИрд╕реЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдЖрдкрдХреЛ 9223372036854775807922333636474780807.922337203685478080222222334785474775807 рдЬреИрд╕реЗ рдирдВрдмрд░реЛрдВ рдкрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдФрд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдСрдкрд░реЗрд╢рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ EAPA рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдХрд┐рд╕реА рднреА рд╕рдорд╛рдзрд╛рди рдХреА рддрд░рд╣, рдИрдПрдкреАрдП рдПрдХ рд╕рдордЭреМрддрд╛ рд╣реИред рд╣рдо рд╕реНрдореГрддрд┐ рдФрд░ рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдЧрддрд┐ рдХрд╛ рддреНрдпрд╛рдЧ рдХрд░рдХреЗ рдЖрд╡рд╢реНрдпрдХ рд╕рдЯреАрдХрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдкрд░ рдПрдХрддреНрд░рд┐рдд рдкреНрд░рджрд░реНрд╢рди рдкрд░реАрдХреНрд╖рдг рдФрд░ рдЖрдВрдХрдбрд╝реЗ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдСрдкрд░реЗрд╢рди 3-30 ╬╝s рдХреА рд╕реАрдорд╛ рдореЗрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред EAPA рдирд┐рд╢реНрдЪрд┐рдд рдмрд┐рдВрджреБ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╕рдордп рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рднреА рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред


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


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


PS рддрд░реНрдХрд╕рдВрдЧрдд рдФрд░ рдЬрдЯрд┐рд▓ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдкреВрд░реНрдгрд╛рдВрдХ, рдлрд╝реНрд▓реЛрдЯ, рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕, рджреЗрд╢реА рдкреНрд░рдХрд╛рд░ рдХреА рдордирдорд╛рдиреА рд╕рдЯреАрдХрддрд╛ рдХреЗ рд╕рд╛рде рдореВрд▓ рдХрд╛рд░реНрдп рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рдХрд╛рд╢рдиреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╕реНрд╡рд┐рдЪ рдордд рдХрд░реЛ!




рд╕рдВрдмрдВрдзрд┐рдд рд╕рд╛рдордЧреНрд░реА:


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


All Articles