(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-45035996273704964503599627370496
Bu durumda büyük çıkış Hamming ağırlığı kodlama bölgesinin (olanların sayısı) kolarak 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ı 22olarak temsil edilir
0 10000000011 0110000000000000000000000000000000000000000000000000
Olduğundan 5olanlar, çı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
binary64base2 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 doubledeğerler longsınırlarına kadar dönüştürülebilir long. (İşaret ettiğiniz gibi, tersi doğru değildir. doubleVarsayı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>. <
binary64biç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. Birbinary64değeri kabul etmek 5 bayttan tasarruf sağlar.