- ベストアンサー
VC++6.0 long型とdouble型の掛け算
kocha1979の回答
double型では、1.15という数値は厳密に表すことができません。 計算機内部では"1.1499999999999999"と表現されます。 (浮動小数点型がどのように扱われるかは、参考URLからたどってみてください) すなわち、 lHoge * dHoge はの答えは "114.99999999999999" となります。 小数を含む数値を整数型の変数に代入する際には、小数点以下は切り捨てられますので、 結果 lAnswer には "114" が入ります。 この性質を利用して、計算結果の四捨五入は lAnswer = lHoge * dHoge + 0.5 という式で可能ですが、誤差の根本解決にはなりません。 誤差が許されない場面では、通常double, float型(浮動小数点型)は使用しません。 このような場面では、多倍長固定小数点を用いることが多いかと思います。(googleでしらべてみてください) でわ。
関連するQ&A
- VC6でlong longでエラー?
VC++6で、void test(unsigned long long a){} の場所で、error C2632: 'long' と 'long' の 2 つの型指定子のあいだにコードがありません。というエラーが発生します。 unsigned long longはVCで動作するものでしょうか?
- ベストアンサー
- C・C++・C#
- VCでキャストに失敗する
double ddd; double ddd2; long lll; long lll2; ddd = -3.038; ddd = ddd*10000.0; ddd2 = -30380.0; lll=(long)ddd; lll2=(long)ddd2; 上記のような処理をした場合に lllは-30379になり lll2は正しい-30380になります。 なぜlllでは-1されてしまうのでしょうか? どなたかお教えください、よろしくお願いします。 コンパイル環境はVC6.0 OSはWomdowsNT SP6です。
- ベストアンサー
- オフィス系ソフト
- 掛け算演算を使わない掛け算
java初心者です。 2つの正の整数を入力して、それらを掛け合わせた答えを表示したのですが、 掛け算演算を使わないということになると、どういうソースを書けばいいんでしょうか。
- ベストアンサー
- Java
- long doubleの有効桁数を教えてください。
long doubleの有効桁数を教えてください。 環境で一概に言えないと思いますが、 私の環境では、sizeof(long double)で12バイトです。 OS Windows Vista(32bit) GCC minGW よろしくお願いします。
- ベストアンサー
- C・C++・C#
- VC++2008にてdouble型の置換について
現在VC++2008をMFCにて開発しております。VC++は初心者です。 画面から入力される値(小数点以下有り)を ファイル名として利用し出力する為 小数点とマイナスを特定の文字列に置換する処理をおこなっております。 画面から入力される値(CString)をそのままatof変換し、 double型で取得しますと 「3000.00000」のような値になってしまいます。 「3000.10100」のような値も入力される可能性があるので 一慨に小数点以下を丸める事もできません。 そういった事を考慮しますと、どういった処理が考えられるでしょうか? ご教授頂ければ幸いです。
- ベストアンサー
- C・C++・C#
- integer型、long型、double型
vb6.0についてお聞きいたします。 こちらの問題は、visual studio 2005のvbでは生じません。 windows xp上で動かしているのですが、どうやら 何もしていないあるパラメータに32000ぐらいの数字よりも大きな 数字をいれるとエラーになってしまいます。 それも、integer型、long型、double型のすべての型で生じます。 そういうものなのでしょうか? HPをいろいろ見ましても、long型で20億ぐらいは 表現できるように書いてあるのですが。
- ベストアンサー
- Visual Basic
- 「割り算」 と 「分数の掛け算」
double型の変数にある値が代入されていて、 その数を半分にしようとしました。 演算部分を /2 としたらエラーが出てしまいました。 いろいろ試した結果、*0.5とすれば ちゃんと計算されるようなのですが、 どうしてこのようなことが起こるのか、よくわかりません。 どなたか、ご教授ください。よろしくお願いします。
- ベストアンサー
- C・C++・C#
- Double,Longをファイルに書き込み
以下のように、Double,Longをファイルに書き込もうとした場合、どのようにキャストをすればよろしいのでしょうか? (String)でString型への変換や Integer.parseInt等を試したのですが、できませんでした。よろしくお願いします。 import java.io.*; class test { public static void main(String[] args) { double dNumber = 3.45; long lNumber = 12345; BufferedWriter bw = new BufferedWriter(new FileWriter("test.txt")); bw.write(dNumber); bw.write(lNumber); } //end main } //end class
- ベストアンサー
- Java
- long double型の戻り値を持つ関数について
文字列を浮動小数点に変換したいと思っています。 StrToFloat()を用いたのですが、有効数値がケタ落ちしてしまいました。 そこで、次のように関数を定義して実行したところ、やはり戻り値の値がケタ落ちしました。 long double StrToValue(AnsiString str) { ・・・・・ return value; } 具体的にはlong doubleの有効数値がdouble型の有効数値にまで落ちてしまっています。 次にポインタを使い、次のように変更したのですが、結果は同じでした。 void StrToValue(AnsiString str, long double *value) { ・・・・・ *value=・・・; ・・・・・ } どなたか、この解決方法と、できれば理由を教えてください。 なお使用した言語は、C++Builder 5 環境はWindows 98 です。
- ベストアンサー
- C・C++・C#
お礼
ご回答ありがとうございます double, float型では正確な計算ができないのですね 勉強になりました。