Google'ın her yerinde onlar hakkında okunması zor olan sabit nokta ve kayan nokta sayılarını anlayamıyorum. Ancak okuduğum hiçbiri, gerçekte ne olduklarına dair yeterince basit bir açıklama sağlamıyor. Örnekle sade bir tanım alabilir miyim?
Google'ın her yerinde onlar hakkında okunması zor olan sabit nokta ve kayan nokta sayılarını anlayamıyorum. Ancak okuduğum hiçbiri, gerçekte ne olduklarına dair yeterince basit bir açıklama sağlamıyor. Örnekle sade bir tanım alabilir miyim?
Yanıtlar:
Sabit nokta numarası, tamsayı bölümü (ondalık noktanın solundaki bölüm) için ayrılmış belirli sayıda bit (veya basamak) ve kesirli bölüm (ondalık basamağın sağındaki bölüm) için ayrılmış belirli sayıda bit içerir. nokta). Numaranız ne kadar büyük veya küçük olursa olsun, her bölüm için her zaman aynı sayıda bit kullanacaktır. Örneğin, sabit nokta biçiminiz ondalık IIIII.FFFFF
sayıdaysa, temsil edebileceğiniz en büyük sayı olur 99999.99999
ve sıfır olmayan en küçük sayı olur 00000.00001
. Bu tür sayıları işleyen her kod biti, ondalık noktanın nerede olduğuna dair yerleşik bilgiye sahip olmalıdır.
Bir kayan noktalı sayı, tamsayı bölümü veya kesirli bölüm için belirli sayıda bit ayırmaz. Bunun yerine, sayı için belirli sayıda biti ( mantis veya anlamlı olarak adlandırılır ) ve bu sayının içinde ondalık basamağın nerede olduğunu ( üs olarak adlandırılır ) söylemek için belirli sayıda biti ayırır . Dolayısıyla, üs için ayrılmış 2 basamaklı 10 basamaklı bir kayan nokta numarası, en büyük değerini 9.9999999e+50
ve en küçük sıfır olmayan değerini temsil edebilir 0.0000001e-49
.
-9.9999999e+50
.
00000.00001
? Onun 00000.00000
yerine görmeyi bekliyorum . Ayrıca, sabit nokta sayıları hakkında daha ayrıntılı bilgi veren referanslarınız var mı?
Sabit nokta sayısı, ondalık noktadan sonra sabit sayıda basamak olduğu anlamına gelir. Kayan nokta sayısı, ondalık noktadan sonra değişen sayıda basamağa izin verir.
Örneğin, ondalık noktadan sonra tam olarak dört basamak gerektiren sayıları saklamanın bir yolu varsa, bu sabit noktadır. Bu kısıtlama olmadan kayan noktadır.
Çoğunlukla, sabit nokta kullanıldığında, programcı aslında bir tamsayı kullanır ve ardından bazı basamakların ondalık ayırıcının ötesinde olduğunu varsayar. Örneğin, iki basamaklı kesinlik tutmak isteyebilirim, bu nedenle 100 değeri aslında 1.00 anlamına gelir, 101 1.01 anlamına gelir, 12345 123.45 anlamına gelir, vb.
Kayan nokta sayıları daha genel amaçlıdır çünkü aynı şekilde çok küçük veya çok büyük sayıları temsil edebilirler, ancak ondalık basamağın gittiği yer için fazladan depolamaya sahip olmanın küçük bir cezası vardır.
Anladığım kadarıyla, sabit nokta aritmetiği tamsayılar kullanılarak yapılır. ondalık kısım sabit bir bit miktarında saklanır veya sayı, ondalık kesinliğin kaç basamaklı olması gerektiği ile çarpılır.
Örneğin, sayının 12.34
saklanması gerekiyorsa ve ondalık noktadan sonra sadece iki basamaklı kesinliğe ihtiyacımız varsa, sayı 100
elde etmek için ile çarpılır 1234
. Bu sayı üzerinde matematik işlemi yaparken, bu kural kümesini kullanırdık. Bu sayıya 5620
veya eklenmesi verilerde veya .56.20
6854
68.54
Sabit noktalı bir sayının ondalık kısmını hesaplamak istiyorsak, modulo (%) operandını kullanırız.
12.34 (sözde kod):
v1 = 1234 / 100 // get the whole number
v2 = 1234 % 100 // get the decimal number (100ths of a whole).
print v1 + "." + v2 // "12.34"
Kayan nokta sayıları, programlamada tamamen farklı bir durumdur. Kayan noktalı sayılar için mevcut standart, sayının verileri için 23 bit, üs için 8 bit ve işaret için 1 gibi bir şey kullanır. Bununla ilgili daha fazla bilgi için bu Wikipedia bağlantısına bakın.
'Sabit nokta' terimi, sayıların ondalık noktadan sonra ve bazen ondalık noktadan önce sabit sayıda rakamla temsil edildiği karşılık gelen tarzı ifade eder. Kayan nokta gösterimi ile, ondalık noktanın yerleşimi, sayının önemli basamaklarına göre 'kayabilir'. Örneğin, tekdüze ondalık nokta yerleştirme kuralına sahip bir sabit nokta gösterimi, 123.45, 1234.56, 12345.67, vb. Sayıları temsil edebilirken, bir kayan nokta gösterimi ek olarak 1.234567, 123456.7, 0.00001234567, 1234567000000000, vb. Temsil edebilir.
123.456789 numarasını al
Kayan nokta, her sayının çoğunu büyük bir hassasiyetle göstermenizi sağlar. Sabit daha az hassastır, ancak bilgisayar için daha basittir.