πŸ’¬ΠšΠ°ΠΊΠΈΠ΅ ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½Ρ‹Π΅ ΠΊΠ°ΠΌΠ½ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с числами с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ Π² Go?



πŸ“ŒΠ’ Go сущСствуСт Π΄Π²Π° Ρ‚ΠΈΠΏΠ° чисСл с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ (Ссли Π½Π΅ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ комплСксныС числа): float32 ΠΈ float64. ΠšΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡ числа с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ Π±Ρ‹Π»Π° ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π΅Π½Π° для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ основной ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Ρ†Π΅Π»Ρ‹Ρ… чисСл: ΠΈΡ… нСспособности ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π΄Ρ€ΠΎΠ±Π½Ρ‹Π΅ значСния.



πŸ“ŒΠ§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ нСприятных ΡΡŽΡ€ΠΏΡ€ΠΈΠ·ΠΎΠ², Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π°Ρ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΠΊΠ° с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ являСтся ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΊ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ Π°Ρ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΠΊΠ΅.



πŸ“ŒΠ”Π»Ρ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° посмотрим Π½Π° ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅:



var n float32 = 1.0001

fmt.Println(n * n)





β—ΎοΈΠœΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ этот ΠΊΠΎΠ΄ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ умноТСния 1.0001 * 1.0001 = 1.00020001. Однако, Ссли Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ процСссоров x86, ΠΎΠ½ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ 1.0002.



β—ΎοΈΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‚ΠΈΠΏΡ‹ float32 ΠΈ float64 Π² Go ΡΠ²Π»ΡΡŽΡ‚ΡΡ приблиТСниями, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ нСсколько ΠΏΡ€Π°Π²ΠΈΠ»:



* ΠŸΡ€ΠΈ сравнСнии Π΄Π²ΡƒΡ… чисСл с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ провСряйтС, Ρ‡Ρ‚ΠΎ ΠΈΡ… Ρ€Π°Π·Π½ΠΈΡ†Π° находится Π² ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅.

* ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ слоТСний ΠΈΠ»ΠΈ Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠΉ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с ΠΏΠΎΡ…ΠΎΠΆΠΈΠΌ порядком Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹ для большСй точности.

* Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ, Ссли ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ слоТСния, вычитания, умноТСния ΠΈΠ»ΠΈ дСлСния, сначала выполняйтС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ умноТСния ΠΈ дСлСния.