Standart C karşılaştırma işlevleri terimlerden biri NaN olduğunda bir olağandışılık tetikler. örneğin,
ifadesinde a bir sayı değilse bir olağandışılık oluşur. (Olağandışılık, karşılaştıma == ve != işleçleriyle yapıldığında oluşmaz; sadece sırasıyla yanlış ve doğru döner.) Çoğunlukla bu olağandışılığın oluşması istenmez. Bu bakımdan, ISO C99 NaN saptandığında olağandışılık oluşturmayan karşılaştıma işlevleri tanımlamıştır. Tüm işlevler argümanları herhangi bir gerçek sayı veri türünde olabilen makrolar olarak gerçeklenmiştir. Makrolar argümanlarının sadece bir kere değerlendirileceğini garanti eder (yani aradeğer yuvarlaması yapılmaz).
int isgreater | (bir-float-tür x,
bir-float-tür y) |
makro
Bu makro x argümanının y argümanından büyük olup olmadığına bakar. (x) > (y) ifadesine eşdeğerdir, fakat argümanlarından birinin bir sayı olmaması durumunda bir olağandışılık oluşturmaz.
int isgreaterequal | (bir-float-tür x,
bir-float-tür y) |
makro
Bu makro x argümanının y argümanından büyük ya da eşit olup olmadığına bakar. (x) >= (y) ifadesine eşdeğerdir, fakat argümanlarından birinin bir sayı olmaması durumunda bir olağandışılık oluşturmaz.
int isless | (bir-float-tür x,
bir-float-tür y) |
makro
Bu makro x argümanının y argümanından küçük olup olmadığına bakar. (x) < (y) ifadesine eşdeğerdir, fakat argümanlarından birinin bir sayı olmaması durumunda bir olağandışılık oluşturmaz.
int islessequal | (bir-float-tür x,
bir-float-tür y) |
makro
Bu makro x argümanının y argümanından küçük ya da eşit olup olmadığına bakar. (x) <= (y) ifadesine eşdeğerdir, fakat argümanlarından birinin bir sayı olmaması durumunda bir olağandışılık oluşturmaz.
int islessgreater | (bir-float-tür x,
bir-float-tür y) |
makro
Bu makro x argümanının y argümanından küçük ya da büyük olup olmadığına bakar. (x) < (y) || (x) > (y) ifadesine eşdeğerdir (ama makroda x ve y sadece bir kere işleme sokulur), fakat argümanlarından birinin bir sayı olmaması durumunda bir olağandışılık oluşturmaz.
Bu makro x != y ifadesine eşdeğerdir, çünkü terimlerden biri bir sayı değilse ifadenin sonucu doğru olacaktır.
int isunordered | (bir-float-tür x,
bir-float-tür y) |
makro
Bu makro argümanlarının NaN olup olmadığına bakar. x ya da x bir sayı değilse doğru, aksi takdirde yanlış döner.
Tüm makineler bu işlemlere donanım desteği sağlamaz. Bu bakımdan, NaN ile işiniz yoksa bu işlevleri kullanmamalısınız.
| Not |
---|
isequal veya isunequal makroları yoktur. Çünkü == ve != işleçleri terimlerden birinin bir sayı olmaması durumunda bir olağandışılık oluşturmadıklarından bunlar için birer makro gereksizdir. |