// 1. hét – Az ábrázolás korlátaiból adódó "meglepetések" Go nyelven
// Futtatás: go run ./h01/pitfalls
package main

import (
	"fmt"
	"math"
)

func main() {
	// 1. Túlcsordulás: körbefordul, mint Java-ban.
	var max int32 = math.MaxInt32
	fmt.Println("MaxInt32     =", max)
	max++
	fmt.Println("MaxInt32 + 1 =", max) // -2147483648

	var b int8 = 127
	b++
	fmt.Println("int8(127) + 1 =", b) // -128

	// Megjegyzés: a konstans kifejezés túlcsordulását a fordító jelzi:
	// var x int8 = 128   // fordítási hiba

	// 2. Egész osztás
	fmt.Println("7 / 2   =", 7/2)   // 3
	fmt.Println("7 % 2   =", 7%2)   // 1
	fmt.Println("7 / 2.0 =", 7/2.0) // 3.5 (konstans kifejezés)

	celsius := 100.0
	a, c := 9, 5
	fmt.Println("Hibás: ", float64(a/c)*celsius+32) // a/c == 1 !
	fmt.Println("Helyes:", float64(a)/float64(c)*celsius+32)

	// Go-ban nincs automatikus konverzió: int és float64 nem keverhető.
	// fmt.Println(a * celsius)  // fordítási hiba

	// 3. Lebegőpontos pontatlanság
	x, y := 0.1, 0.2
	sum := x + y
	fmt.Println("0.1 + 0.2 =", sum)
	fmt.Println("0.1 + 0.2 == 0.3 ?", sum == 0.3)
	const eps = 1e-9
	fmt.Println("|sum - 0.3| < eps ?", math.Abs(sum-0.3) < eps)

	// 4. Konverzió
	pi := 3.99
	fmt.Println("int(3.99) =", int(pi))               // 3 – csonkol
	fmt.Println("math.Round(3.99) =", math.Round(pi)) // 4
	large := 300
	fmt.Println("int8(300) =", int8(large)) // 44 – alsó 8 bit
}
