浮動小数点数を離散的に分割するプログラムを作成する必要があります。 私はstart_actual(5.66882)からend_actual(8.05153)まで増分0.43322ずつ増やしていく必要がありますが、オーバーシュートの値を増やしている間はend_actualまで減少し、プロセスは終了します。私は変更する場合はここで 浮動小数点数を離散セグメントに分割する
は結果が 5.66882 6.10204 6.53526 6.96848である。この場合、私の試み
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
using namespace std;
int main()
{
float max=9.5678;
float min= 5.2356;
float diff=max-min;
float start= 10; //percentages
float end= 65; //percentages
float incr= 10; //percentages
int steps= ((end-start)/incr);
float start_actual= min+ (diff*start/100);
float end_actual= max-(diff*(100-end)/100);
float incr_actual= diff*incr/100;
cout<<"Min value is "<<min<<endl;
cout<<"Max value is "<<max<<endl;
cout<<"start_actual is "<<start_actual<<endl;
cout<<"end_actual is "<<end_actual<<endl;
cout<<"increment is"<<incr_actual<<endl;
cout<<"steps is"<<steps<<endl;
float value;
steps=steps+1;
for(int i=0;i<=steps;i++)
{
value= start_actual + (incr_actual*i);
if(value<=end_actual)
cout<<"value is "<<value<<endl;
else if ((end_actual-value)<incr_actual)
{
value=end_actual;
cout<<"final value is "<<value;
break;
}
//else if (((value-end_actual)<0.1)||((-value+end_actual)<0.1))
//cout<<"value is"<<end_actual<<endl;
}
//cout<<"diiff "<<diff<<endl;
getchar();
return(0);
}
....など。 8.05153
ですが、
の値float start= 10; //percentages
float end= 65; //percentages
float incr= 5; //percentages
丸め誤差のため、最後の値が2回(8.05153)印刷されますが、この問題を解決する方法はありますか?
事前に感謝.. Vipin
「2度印刷された」というのはどういう意味ですか?あなたはループを使って印刷していません。また、問題点が明確ではありません。浮動小数点値の精度は限られており、浮動小数点値については考慮する必要があります。 – einpoklum