Есть ли стандартная функция знака (signum, sgn) в C / C ++?
Да, в зависимости от определения.
C99 и более поздние имеют макрос
signbit()
в
int signbit
(в реальном времениx
);
Макросsignbit
возвращает ненулевое значение тогда и только тогда, когда знак значения аргумента отрицательный. C11 §7.12.3.6И все же OP хочет что-то немного другое.
Я хочу функцию, которая возвращает -1 для отрицательных чисел и +1 для положительных чисел. ... функция, работающая на поплавках.
#define signbit_p1_or_n1(x) ((signbit(x) ? -1 : 1)
Глубже:
Должность не является конкретной в следующих случаях,
x = 0.0, -0.0, +NaN, -NaN
.Классический
signum()
возвращает+1
наx>0
,-1
наx>0
и0
наx==0
.Многие ответы уже охватили это, но не касаются
x = -0.0, +NaN, -NaN
. Многие из них ориентированы на целочисленную точку зрения, в которой обычно отсутствуют не-числа ( NaN ) и -0,0 .Типичные ответы работают как
signnum_typical()
В-0.0, +NaN, -NaN
они возвращают0.0, 0.0, 0.0
.int signnum_typical(double x) { if (x > 0.0) return 1; if (x < 0.0) return -1; return 0; }
Вместо этого предложите эту функциональность: На
-0.0, +NaN, -NaN
он возвращает-0.0, +NaN, -NaN
.double signnum_c(double x) { if (x > 0.0) return 1.0; if (x < 0.0) return -1.0; return x; }
Нам нужна дополнительная информация о конфигурации вашего жесткого диска, таблица разделов GPT или MBR? Общий размер жесткого диска?
Предполагая его MBR, это позволит только 4 основных раздела. Так что вам придется удалить 2 основных раздела и изменить размер 1 для Ubuntu. Затем в другом разделе создайте расширенный раздел с логическим разделом, чтобы вы могли добавлять другие логические разделы, если они вам нужны.
Ваша таблица разделов будет выглядеть примерно так:
Primary 1 - sda1 (ntfs - Windows)
Primary 2 - sda2 (ntfs - Windows)
Primary 3 - sda3 (ext4 - Ubuntu)
Primary 4 - (if needed)
Extended Partition:
Logical - sda4 (Linux Swap)
Logical - sda5 (if needed)
Это если ваш жесткий диск настроен для MBR и если на вашем жестком диске есть место для второй ОС. В конце вам, вероятно, придется удалить разделы, чтобы освободить место. Удачи.