Mail.ruПочтаМой МирОдноклассникиИгрыЗнакомстваНовостиПоискСмотриComboВсе проекты

В Си синус возвращает число с плавающей точкой. Если у меня реализация программы полностью на целочисленной арифметике?

Vladimir Знаток (369), закрыт 2 дня назад
На входе целые числа, на выходе целые. Как вычислить синус?
Лучший ответ
Батаев Дмитрий Мудрец (14482) 6 дней назад
сказали, что синус от -1 до 1... Возьми и масштабируй синус умножением на 100, например, и отбрось оставшуюся дробную часть
Остальные ответы
Jollies Знаток (353) 6 дней назад
либо округление (отброс вещ части) с приведением типа,
либо формат там был
не помню точно как в Си, скорее всего 2й вариант
Андрей Искусственный Интеллект (157649) 6 дней назад
Как ты себе представляешь целочисленный синус, если весь диапазон его значений: [-1;1]?
При каких значениях x синус будет принимать значения -1, 0, 1 (а других целочисленных значений у синуса быть не может)?
Highest-precision ArmyПросветленный (41935) 6 дней назад
Синус не нужно делать целочисленным. Нужно просто подставить его в формулу, а результат ее класть в int.
Андрей Искусственный Интеллект (157649) Highest-precision Army, Если бы только результат... Но в вопросе прямым русским языком: "полностью на целочисленной арифметике".
Федор Новиков Искусственный Интеллект (160734) 6 дней назад
Придётся реализовывать арифметику с фиксированной точкой, потом писать вычисление синуса или брать значение из таблицы
VladimirЗнаток (369) 6 дней назад
Это вариант.
Highest-precision Army Просветленный (41935) 6 дней назад
Просто подставляй синус в свою формулу с целыми числами, а результат уже от всей формулы (он будет float) клади в int.
VladimirЗнаток (369) 6 дней назад
Может я что-то не так понимаю... У меня микроконтроллер STM32 и он не поддерживает аппаратно операции с FPU. Конечно можно взять с FPU, но это дороже
Евгений Высочин Мыслитель (5292) 6 дней назад
Скинь условие задачи целиком
VladimirЗнаток (369) 6 дней назад
Допустим, нужно построить синусоидальную функцию с различной магнитудой - от нуля до 35000, частотой 440 Гц, и нулевой начальной фазой. Ну и далее рассчитать значения мгновенных амплитуд, ну и скажем строить временной график.
Николай Веселуха Высший разум (249180) 6 дней назад
auto a = 5, b = 7;
auto c = static_cast<int>(a * sin(b) + b * sin(a));
cout << c << '\n'
Jurijus Zaksas Искусственный Интеллект (290052) 6 дней назад
Гм... Да никак.
Оставим даже возвращаемые синусом значения - в конце концов, ты можешь всегда просто отбросить дробную часть результата. Но! Период синуса - два пи. Т. е. у тебя может быть только синус - 0 1 2 3 4 5 или 6. Выглядит как полный бред, не находишь?
Похожие вопросы
Также спрашивают