Как часть более крупного проекта, я хочу изменить некоторые значения в шаблоне длины волны, а не на диаграмме линейного типа +1.Неожиданные/нежелательные результаты в вычислении синусоидальной волны в Python
Чтобы быть ясным, у меня нет желания пытаться построить их на графике или что-то в этом роде ... Я хочу использовать эти значения для управления некоторой интенсивностью цвета через мою малиновую пи.
В любом случае, вернуться к этому вопросу под рукой ...
У меня есть следующий сценарий питона:
#!/usr/bin/python
from math import *
Fs=8000
f=500
i=0
while i<50:
print (sin(2*pi*f*i/Fs))
i+=1
Который дает мне следующий результат (укороченный):
0.0
0.382683432365
0.707106781187
0.923879532511
1.0
0.923879532511
0.707106781187
0.382683432365
1.22464679915e-16
-0.382683432365
-0.707106781187
-0.923879532511
-1.0
-0.923879532511
-0.707106781187
-0.382683432365
-2.44929359829e-16
0.382683432365
0.707106781187
0.923879532511
1.0
Как вы можете видеть, время от времени есть значение, которое есть только выход:
1.22464679915e-16
-2.44929359829e-16
3.67394039744e-16
-4.89858719659e-16
2.38868023897e-15
-7.34788079488e-16
Почему я получаю эти странные результаты? Как я избегаю этих ценностей? Что я делаю не так?
Возможно, константа «pi» - это поплавок: https://en.wikipedia.org/wiki/Floating_point – Welbog
Эти значения не являются «выходными», они почти равны 0.0. Причина, по которой они не равны нулю, - это [плавающая точка не всегда точно] (http://stackoverflow.com/questions/588004/is-floating-point-math-broken). –
Используйте 'for i in range (50): print (16 + sin (2 * pi * f * i/Fs)) -16', чтобы обрезать последние биты шумом округления. – LutzL