У мене є програма на C ++ (складена за допомогою g ++). Я намагаюся застосувати два дублі в якості операндів до функції модуля, але я отримую таку помилку:
помилка: недійсні операнди типів "подвійний" і "подвійний" до двійкового "оператора%"
Ось код:
int main() {
double x = 6.3;
double y = 2;
double z = x % y;
}
@supercat більше деталей було б дивним. Я думаю, маєте уявлення про те, що відбувається за лаштунками, щоб зробити те, що ви говорите, правдою, але було б добре бачити причини, чому те, що ви говорите, є істинним; було б цікаво подивитися, як це працює за лаштунками (я думаю, я розумію, але міг би дуже легко помилитися).
—
RastaJedi
Значення з плаваючою комою представляють точні цілі кратні чи частки потужностей двох. Наприклад, ціле число буквально 0,1 дорівнює рівно 3602879701896397/36028797018963968 (останнє значення - потужність двох).
—
supercat
fmod(x,0.1)
поділимо х на цей точний дріб і візьмемо решту, а не ділимо на числове значення "одну десяту".
Можливий дублікат: Чому поділ модулів (%) працює лише з цілими числами?
—
Пол Р.
fmod
може спричинити несподівані поведінки. Наприклад,fmod(1, 0.1);
математично повинно бути нуль, але насправді буде майже 0,1. Ступінь помилки збільшується з величиною коефіцієнта. Наприклад,fmod(9E14, 0.1);
оцінюється приблизно до 0,05, що з математичної точки зору просто неправильно.