큰 프로젝트의 일부로 +1 선형 패턴이 아닌 웨이브 길이 유형 패턴의 일부 값을 변경하고 싶습니다.Python에서 사인파 계산시 예기치 않은/원치 않는 결과가 발생했습니다.
분명히하기 위해 그래프 나 그 밖의 것들에 이들을 그려보기를 원하지는 않습니다 ...이 값을 사용하여 라즈베리 파이를 통해 색 농도를 제어하고 싶습니다. 다시 손을 문제에 어쨌든
, ...
I가 다음과 같은 파이썬 스크립트를#!/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"상수는 float입니다. https://en.wikipedia.org/wiki/Floating_point – Welbog
이러한 값은 "출구"가 아니며 거의 0.0입니다. 그들이 정확히 0이 아닌 이유는 [부동 소수점이 항상 정확한 것은 아닙니다] (http://stackoverflow.com/questions/588004/is-floating-point-math-broken)입니다. –
반올림 노이즈로 마지막 비트를 자르기 위해 'for range (50) : print (16 + sin (2 * pi * f * i/Fs)) -16'을 사용하십시오. – LutzL