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

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

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