統合プログラム
Dependencies: mbed Servo BMP180
calculate.h@3:a583276d9fef, 2021-10-28 (annotated)
- Committer:
- tsubasa_nakajima
- Date:
- Thu Oct 28 07:57:02 2021 +0000
- Revision:
- 3:a583276d9fef
- Parent:
- 0:e7b7def631c2
- Child:
- 4:6e24a1b3edca
fixed error
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
minanao | 0:e7b7def631c2 | 1 | #include "mbed.h" |
minanao | 0:e7b7def631c2 | 2 | |
minanao | 0:e7b7def631c2 | 3 | //nの階乗を計算する関数 |
tsubasa_nakajima | 3:a583276d9fef | 4 | int fact(int n){ |
tsubasa_nakajima | 3:a583276d9fef | 5 | int i, result = 1; |
minanao | 0:e7b7def631c2 | 6 | if(n == 0) |
minanao | 0:e7b7def631c2 | 7 | return 1; |
minanao | 0:e7b7def631c2 | 8 | else |
minanao | 0:e7b7def631c2 | 9 | { |
minanao | 0:e7b7def631c2 | 10 | for(i = 1;i <= n;i++) |
minanao | 0:e7b7def631c2 | 11 | { |
minanao | 0:e7b7def631c2 | 12 | result *= i; |
minanao | 0:e7b7def631c2 | 13 | } |
minanao | 0:e7b7def631c2 | 14 | return result; |
minanao | 0:e7b7def631c2 | 15 | } |
minanao | 0:e7b7def631c2 | 16 | } |
minanao | 0:e7b7def631c2 | 17 | |
minanao | 0:e7b7def631c2 | 18 | float my_pow(float x, int n) |
minanao | 0:e7b7def631c2 | 19 | { |
minanao | 0:e7b7def631c2 | 20 | int i; |
minanao | 0:e7b7def631c2 | 21 | float pow_result = 1; |
minanao | 0:e7b7def631c2 | 22 | |
minanao | 0:e7b7def631c2 | 23 | if(n == 0) |
minanao | 0:e7b7def631c2 | 24 | return 1; |
minanao | 0:e7b7def631c2 | 25 | else |
minanao | 0:e7b7def631c2 | 26 | { |
minanao | 0:e7b7def631c2 | 27 | for(i = 0;i < n;i++) |
minanao | 0:e7b7def631c2 | 28 | { |
minanao | 0:e7b7def631c2 | 29 | pow_result *= x; |
minanao | 0:e7b7def631c2 | 30 | } |
minanao | 0:e7b7def631c2 | 31 | return pow_result; |
minanao | 0:e7b7def631c2 | 32 | } |
minanao | 0:e7b7def631c2 | 33 | } |
minanao | 0:e7b7def631c2 | 34 | |
minanao | 0:e7b7def631c2 | 35 | float my_exp(float x) |
minanao | 0:e7b7def631c2 | 36 | { |
minanao | 0:e7b7def631c2 | 37 | int i; |
minanao | 0:e7b7def631c2 | 38 | float result = 0; |
minanao | 0:e7b7def631c2 | 39 | |
minanao | 0:e7b7def631c2 | 40 | |
minanao | 0:e7b7def631c2 | 41 | for(i = 1;i <= 25; i++) |
minanao | 0:e7b7def631c2 | 42 | { |
minanao | 0:e7b7def631c2 | 43 | result += my_pow(x, i) / fact(i); |
minanao | 0:e7b7def631c2 | 44 | } |
minanao | 0:e7b7def631c2 | 45 | |
minanao | 0:e7b7def631c2 | 46 | return result + 1; |
minanao | 0:e7b7def631c2 | 47 | } |
minanao | 0:e7b7def631c2 | 48 | |
minanao | 0:e7b7def631c2 | 49 | float my_log(float x) |
minanao | 0:e7b7def631c2 | 50 | { |
minanao | 0:e7b7def631c2 | 51 | int i; |
minanao | 0:e7b7def631c2 | 52 | float result1, result2; |
minanao | 0:e7b7def631c2 | 53 | |
minanao | 0:e7b7def631c2 | 54 | x -= 1; |
minanao | 0:e7b7def631c2 | 55 | result1 = 0; |
minanao | 0:e7b7def631c2 | 56 | result2 = 0; |
minanao | 0:e7b7def631c2 | 57 | |
minanao | 0:e7b7def631c2 | 58 | for(i = 1;i <= 40;i++) |
minanao | 0:e7b7def631c2 | 59 | { |
minanao | 0:e7b7def631c2 | 60 | if(i % 2 == 1) |
minanao | 0:e7b7def631c2 | 61 | result1 += my_pow(x, i) / i; |
minanao | 0:e7b7def631c2 | 62 | else |
minanao | 0:e7b7def631c2 | 63 | |
minanao | 0:e7b7def631c2 | 64 | result2 += my_pow(x, i) / i; |
minanao | 0:e7b7def631c2 | 65 | } |
minanao | 0:e7b7def631c2 | 66 | |
minanao | 0:e7b7def631c2 | 67 | return result1 - result2; |
minanao | 0:e7b7def631c2 | 68 | } |
minanao | 0:e7b7def631c2 | 69 | |
minanao | 0:e7b7def631c2 | 70 | //累乗 |
minanao | 0:e7b7def631c2 | 71 | float mypow(float x, float y) |
minanao | 0:e7b7def631c2 | 72 | { |
minanao | 0:e7b7def631c2 | 73 | return my_exp(y * my_log(x)); |
minanao | 0:e7b7def631c2 | 74 | } |
minanao | 0:e7b7def631c2 | 75 | |
minanao | 0:e7b7def631c2 | 76 | //高度計算 |
minanao | 0:e7b7def631c2 | 77 | float calculate_h(float dP0FIX,float dp,float dt){ |
minanao | 0:e7b7def631c2 | 78 | float dpow = 1.0/5.256; |
minanao | 0:e7b7def631c2 | 79 | float dP0 = 1013.25; |
minanao | 0:e7b7def631c2 | 80 | float a = (dt+(float)273.15)/(float)0.0065; |
minanao | 0:e7b7def631c2 | 81 | float s = (mypow(dP0/dp,dpow)- mypow(dP0/dP0FIX,dpow))*a - 27; |
minanao | 0:e7b7def631c2 | 82 | return s; |
minanao | 0:e7b7def631c2 | 83 | } |
minanao | 0:e7b7def631c2 | 84 | |
minanao | 0:e7b7def631c2 | 85 | //海面気圧計算 |
minanao | 0:e7b7def631c2 | 86 | float calculate_dp0(float dp,float dt){ |
minanao | 0:e7b7def631c2 | 87 | float s = dp*mypow(1 - (0.0065*27)/(dt+0.0065*27+273.15),-5.257); |
minanao | 0:e7b7def631c2 | 88 | return s; |
minanao | 0:e7b7def631c2 | 89 | } |