', { cookie_domain: 'auto', cookie_flags: 'max-age=0;domain=.tistory.com', cookie_expires: 7 * 24 * 60 * 60 // 7 days, in seconds }); 빈티지 스타일의 아두이노 계산기 #9 - 문제와 해결방법 추측 등의 고민. :: MakerLee's Workspace
728x90

BigNumber는 큰 수 처리에 정말 좋은 라이브러리지만 

초보자를 위한 라이브러리는 아닌 듯.



참조1)

loop 바깥에서

BigNumber a="1234567890.0987654321"; 로 전역선언후 시리얼로 출력해 보면

a=1234567890

로 나온다. 


BigNumber a=1234567890.0987654321; 로 따옴표를 떼면

a=32767로 나옴. 



특이하게도 

BigNumber a='1234567890.0987654321'; 로 홑따옴표를 붙이면

a=12849가 된다. 


BigNumber a="1234567890.0987654321"; 를 loop 안쪽에서 선언하면 

a=1234567890.0987654321 로 제대로 나온다.



BigNumber a = "123556.2342" 형태나 BigNumber a ("143563245.21345245") 형태로 사용해야 한다. 

이 라이브러리는 숫자를 String 취급하는 것 같은데 

그렇다고 실제로 String으로 생각하고 스케치를 하면 오류를 뿜는다. 

문자열 길이를 측정하는 length() 같은 함수를 쓸 수 없다. 




참조2)

LED 디스플레이에 숫자 표기를 정확히 하기 위해서는 숫자의 자리수가 얼마인지 셀 수 있어야 한다.

디스플레이의 자릿수를 벗어나면 정리해 주어야 한다.


숫자의 길이를 측정하려면 
char s = n.toString();  //n을 문자열로 치환하여 s에 저장

length = strlen(s);        //s의 길이를 구하여 length에 저장

같은 식으로 사용해야 한다. 


하지만 이 경우 소수점이 포함되어 계산되므로 

1 -> 1자리수

1.00 -> 4자리수 로 계산되는 문제가 있다.



문제1)

1이상의 수는 어떻게든 처리가 가능하다.

하지만 1 미만의 수는 소수점 때문에 처리가 매우 곤란해진다. 

1 = 1.0000000 과 같이 나오는데 이 경우 0.000000을 어떻게 처리해야 하는가?


문제2)

소수점 이하의 수는 자리수를 어떻게 계산하는가?

1 이상의 수는 10씩 나눠가면서 그 수가 0보다 큰지 아닌지 체크하고
0보다 크면 다시 10 나누는 식으로 자릿수를 계산할 수 있다.

456 
10을 나눈다. = 45.6   (1회)
1보다 큰가? ->yes
10을 나눈다 = 4.56    (2회)
1보다 큰가? ->yes
10을 나눈다 = 0.456  (3회)
1보다 큰가? ->no

3회 반복했으므로 자릿수는 3

하지만 1보다 작은 수는 어떻게 처리해야 하는가?
ex)0.000123


추측1)

123.456을 123 과 0.456으로 분리할 수 있다면 위의 문제들을 해결하기 쉬울 것 같다.
분리하는 방법은?



http://cafe.naver.com/arduinostory/52325


https://arduino.stackexchange.com/questions/1013/how-do-i-split-an-incoming-string



http://cafe.naver.com/arduinostory/27858


728x90

+ Recent posts