| |||
|
|
Границы бесконечности Опять у меня проблемы с бесконечностью в языке C. (предыдущие серии вот и вот. Пора уже тэг заводить) На этот раз с функцией isinf(), вернее __builtin_isinf() в clang Народ долго разбирался почему и как и доразбирался до того, что #include <stdio.h> #include <math.h> int main(int argc, char **argv) { double d1 = (argc ? 1e180 : 0); double d2 = (argv ? 1e200 : 0); int r2 = __builtin_isinf(d1 * d2); int r1 = isinf(d1 * d2); printf("r1 = %d, r2 = %d\n", r1, r2); return 0; } Выяснилось что 32-битная x86 архитектура, использующая 80-битные регистры сопроцессора работает с бо́льшим диапзоном вещественных чисел, чем 64-битная (использующая 64битные floating point registers) Там в треде по ссылке еще много дивного узнать можно про современные компиляторы. This entry was originally posted at https://vitus-wagner.dreamwidth.org/2022 |
||||||||||||||