web-dev-qa-db-ja.com

2つの整数xとyを浮動小数点数x.yに効率的に変換する

2つの整数XとYが与えられた場合、C++でそれらをX.Y float値に変換する最も効率的な方法は何ですか?

例えば。

 X = 3, Y = 1415 -> 3.1415

 X = 2, Y = 12   -> 2.12
6
tunafish24
double IntsToDbl(int ipart, int decpart)
{
    //The decimal part:
    double dp = (double) decpart;
    while (dp > 1)
    {
        dp /= 10;
    }

    //Joint boths parts
    return ipart + dp;
}
0
Ripi2

読みやすく、従うのが簡単なものが必要な場合は、次のようなものを試すことができます。

float convertToDecimal(int x)
{
  float y = (float) x;
  while( y > 1 ){
    y = y / 10;
  }
  return y;
}

float convertToDecimal(int x, int y)
{
  return (float) x + convertToDecimal(y);
}

これは単に、1つの整数を1未満の最初の浮動小数点に減らし、それを他の整数に追加します。

1.0012のような数値を2つの整数として表す場合、これは問題になります。しかし、それは問題の一部ではありません。それを解決するには、3番目の整数表現を使用して、2番目の数値を乗算するために10の負のべき乗にします。 IE 1.0012は1、12、4になります。これは、次のようにコード化されます。

float convertToDecimal(int num, int e)
{
  return ((float) num) / pow(10, e);
}

float convertToDecimal(int x, int y, int e)
{
  return = (float) x + convertToDecimal(y, e);
}

この回答の方が少し簡潔ですが、質問への回答には役立ちません。そのデータモデルに固執する場合、2つの整数のみの使用に関する問題を示すのに役立つ場合があります。

0
fkantner

これを試して

#include <iostream>
#include <math.h>
using namespace std;
float int2Float(int integer,int decimal)
{
    float sign = integer/abs(integer);
    float tm = abs(integer), tm2 = abs(decimal);
    int base = decimal == 0 ? -1 : log10(decimal);
    tm2/=pow(10,base+1);
    return (tm+tm2)*sign;
}
int main()
{
    int x,y;
    cin >>x >>y;
    cout << int2Float(x,y);
    return 0;
}

バージョン2、これを試してください

#include <iostream>
#include <cmath>
using namespace std;

float getPlaces(int x)
{
    unsigned char p=0;
    while(x!=0)
    {
        x/=10;
        p++;
    }
    float pow10[] = {1.0f,10.0f,100.0f,1000.0f,10000.0f,100000.0f};//don't need more
    return pow10[p];
}
float int2Float(int x,int y)
{
    if(y == 0) return x;
    float sign = x != 0 ? x/abs(x) : 1;
    float tm = abs(x), tm2 = abs(y);
    tm2/=getPlaces(y);
    return (tm+tm2)*sign;
}
int main()
{
    int x,y;
    cin >>x >>y;
    cout << int2Float(x,y);
    return 0;
}
0
aliberro