(522 52 ) ila (2 52 ) aralığında bir tamsayı girişi olarak size verilecektir . Gibi iyi bilinen , bu aralıkta tam sayılar tam olarak çift kesinlikli kayar nokta değerleri olarak ifade edilebilir.k
-4503599627370496
4503599627370496
Bu durumda büyük çıkış Hamming ağırlığı kodlama bölgesinin (olanların sayısı) k
olarak binary64 biçimi . Bu, işaret için 1 bit, üs için 11 bit (bir kayma ile kodlanmış) ve mantis için 52 kullanır; Ayrıntılar için yukarıdaki linke bakınız.
Bir de , örneğin , sayı 22
olarak temsil edilir
0 10000000011 0110000000000000000000000000000000000000000000000000
Olduğundan 5
olanlar, çıkış olduğunu 5
.
Endianness'in sonucu etkilemediğine dikkat edin, bu sayede, çıkışı hesaplamak için makinenizin gerçek çift hassasiyetli değerlerin iç gösterimini güvenle kullanabilirsiniz.
Ek kurallar
- Program veya fonksiyonlara izin verilir.
- Herhangi bir programlama dili kullanılabilir.
- Standart boşluklar yasaktır
- Giriş numarası ondalık olacaktır. Bunun dışında giriş / çıkış araçları ve formatları her zamanki gibi esnektir .
- Bayt cinsinden en kısa kod kazanır.
Test durumları
22 -> 5
714 -> 6
0 -> 0
1 -> 10
4503599627370496 -> 5
4503599627370495 -> 55
1024 -> 3
-1024 -> 4
-4096 -> 5
1000000000 -> 16
-12345678 -> 16
binary64
base2 tamsayılarının üs ve mantislerini eklemek olabilir . Yine de onları ayrı ayrı ele almanız gerekiyorsa, tüm puntolarda punto ve loop dışında bir şey yapmaya değer olabilir.
long
, bu yüzden herhangi bir binary64 söyleyemezsiniz double
, çünkü her iki katı da tam sayı değildir. Ancak tüm tamsayı değerli double
değerler long
sınırlarına kadar dönüştürülebilir long
. (İşaret ettiğiniz gibi, tersi doğru değildir. double
Varsayılan yuvarlama modunu varsayarak en yakın temsil edilebilir duruma gelirsiniz ). Her neyse, bu soruyu oluşturmanın tamamen geçerli bir yoluydu; Sadece dikkatlice okumadım>. <
binary64
biçiminde kabul edebilmelerini mi düşünüyorsunuz? Bazı insanlar (kendim de dahil) soruyu, fonksiyonların girdileri C'ler gibi bir tamsayı olarak kabul etmesini gerektiriyor olarak yorumluyorlardılong
. C de, tıpkı aradığınız zaman dilin sizin için dönüştüğünü iddia edebilirsinizsqrt((int)foo)
. Ancak , her ikisi de 64 bit tam sayı girişleri kabul etmek zorunda olduğumuzu farz eden bazı x86 makine kodu asm cevapları ( codegolf.stackexchange.com/a/136360/30206 ve benimki gibi ) vardır. Birbinary64
değeri kabul etmek 5 bayttan tasarruf sağlar.