累乗根の除算
Posted: 2018年1月22日(月) 02:01
443*2^(1/12)と443/2^(1/12)の計算をそれぞれ10回ずつ繰り替えしたいのですが割り算のほうがうまくいきません。どうすればいいか教えてください。
ソースコード
#include <stdio.h>
#include <math.h>
int main(void)
{
double ans=443,i;
double x = 2.0; // 基数
double y = 0;
double a = 1.0/12.0; // 指数
y = pow(x, a);// べき乗の計算(y=x^a)
printf("%f\n",y);
printf("ラより上の音域\n");
for(i=0;i<10;i++){
printf("ans=%f\n", ans*y); // 計算結果の表示
ans=ans*y;
}
printf("ラより下の音域\n");
for(i=0;i>-10;i--){
printf("ans=%f\n", ans/y); // 計算結果の表示
ans=ans*y;
}
return 0;
}
実行結果
1.059463
ラより上の音域
ans=469.342151
ans=497.250687
ans=526.818752
ans=558.145025
ans=591.334055
ans=626.496608
ans=663.750035
ans=703.218666
ans=745.034224
ans=789.336264
ラより下の音域
ans=745.034224
ans=789.336264
ans=836.272641
ans=886.000000
ans=938.684302
ans=994.501375
ans=1053.637504
ans=1116.290050
ans=1182.668111
ans=1252.993216
ソースコード
#include <stdio.h>
#include <math.h>
int main(void)
{
double ans=443,i;
double x = 2.0; // 基数
double y = 0;
double a = 1.0/12.0; // 指数
y = pow(x, a);// べき乗の計算(y=x^a)
printf("%f\n",y);
printf("ラより上の音域\n");
for(i=0;i<10;i++){
printf("ans=%f\n", ans*y); // 計算結果の表示
ans=ans*y;
}
printf("ラより下の音域\n");
for(i=0;i>-10;i--){
printf("ans=%f\n", ans/y); // 計算結果の表示
ans=ans*y;
}
return 0;
}
実行結果
1.059463
ラより上の音域
ans=469.342151
ans=497.250687
ans=526.818752
ans=558.145025
ans=591.334055
ans=626.496608
ans=663.750035
ans=703.218666
ans=745.034224
ans=789.336264
ラより下の音域
ans=745.034224
ans=789.336264
ans=836.272641
ans=886.000000
ans=938.684302
ans=994.501375
ans=1053.637504
ans=1116.290050
ans=1182.668111
ans=1252.993216