#!/usr/bin/env python3

# 64 bits
red = 0xFFFF_FFFF_FFFF_FFFF
green = 0x0000_0000_0000_0000
blue = 0xFFFF_0000_FFFF_0000

red = red      / 0xFFFF_FFFF_FFFF_FFFF
green = green  / 0xFFFF_FFFF_FFFF_FFFF
blue = blue    / 0xFFFF_FFFF_FFFF_FFFF
print("RGB =", red, green, blue)

X = (red * 0.4451698156) + (green * 0.2771344092) + (blue * 0.1722826698)
Y = (red * 0.2094916779) + (green * 0.7215952542) + (blue * 0.0689130679)
Z = (red * 0.0000000000) + (green * 0.0470605601) + (blue * 0.9073553944)
print("XYZ =", X, Y, Z)

red   = (X *  2.7253940305) + (Y * -1.0180030062) + (Z * -0.4401631952)
green = (X * -0.7951680258) + (Y *  1.6897320548) + (Z *  0.0226471906) 
blue  = (X *  0.0412418914) + (Y * -0.0876390192) + (Z *  1.1009293786)
print("RGB =", red, green, blue)


for nb_bits in range(8, 65, 2):

	# multiplicator
	mul = (2**nb_bits)-1

	# convert
	h_red   = int(round(red * mul))
	h_green = int(round(green * mul))
	h_blue  = int(round(blue * mul))
	print(f"{nb_bits:>2} bits : %-20s\t%-20s\t%-20s" % (
		h_red,
		h_green,
		h_blue
	))

	# print(f"0 > {h_red} < {mul}")
	# print(f"0 > {h_green} < {mul}")
	# print(f"0 > {h_blue} < {mul}")

	if 0 > h_red < mul:
		print(f"# out-of-bound for red")

	if 0 > h_green < mul:
		print(f"# out-of-bound for green")

	if 0 > h_blue < mul:
		print(f"# out-of-bound for blue")

