• ベストアンサー

long doubleの有効桁数を教えてください。

long doubleの有効桁数を教えてください。 環境で一概に言えないと思いますが、 私の環境では、sizeof(long double)で12バイトです。 OS Windows Vista(32bit) GCC minGW よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.2

long doubleの有効桁数としてどうかは知りませんが、Intel CPUの浮動小数点レジスタは内部的には80bit(10バイト)で構成されています。コンパイラがこれを使うコードを生成しているならこの80bit浮動小数点数の精度でしょう。具体的な精度はIntelのマニュアルを確認ください。 なお、メモリ上で12バイト使うのは32bit境界への整列の関係だと思います。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

float.h を #include して LDBL_MANT_DIG とか LDBL_DIG とかを見る.

関連するQ&A

  • c++でunsigned long long intを用いるには

    OS(ディストリビューション)はubuntuです。 この質問の目標は表題のように 「c++でunsigned long long intを使えるようにすること」 です。なお、マシンは32bitなので64bitよりは遅くなります。 http://www.wdic.org/w/TECH/long%20long まずgccのバージョンは、gcc --versionによると、 gcc (GCC) 3.3.5 (Debian 1:3.3.5-8ubuntu2.1) でした。そこで、gccのバージョンを3.4.4以上に しようと考えました。 (↓の人は3.4.4でできているらしい。 http://qune.cside.com/archives/000959.html) そこで、 http://webos-goodies.jp/archives/50899271.html にそってgccをアップデートしようとしましたが、 /etc/portage/ というディレクトリはありませんでした。次に、 http://www.gentoo.org/doc/ja/gcc-upgrading.xml にそってgccをアップデートしようとしましたが、 emergeというコマンドは入っていませんでした。 さて、質問は以下の通りです。 1.「目標」を達成するのにこのルートはあっているのでしょうか? 2.あっているのなら、emergeのインストール法を教えてください。 3.あっていないなら、どのようにしたら「目標」を達成できるでしょうか?

  • unsigned long 型の32bit 

    unsigned long testData = 1; testData = (testData << 32); 上記のような64bitのデータを32bit左シフトすると gccで警告がでます。 warning : left shift count = width of type sizeof(unsigned long) は8となっており、64bitなので、 32ビット左シフト演算は問題がないように思いますが、 なにが問題なのでしょうか?

  • 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 です。

  • integer型、long型、double型

    vb6.0についてお聞きいたします。 こちらの問題は、visual studio 2005のvbでは生じません。 windows xp上で動かしているのですが、どうやら 何もしていないあるパラメータに32000ぐらいの数字よりも大きな 数字をいれるとエラーになってしまいます。 それも、integer型、long型、double型のすべての型で生じます。 そういうものなのでしょうか? HPをいろいろ見ましても、long型で20億ぐらいは 表現できるように書いてあるのですが。

  • sizeof(long), sizeof(short)   (処理系依存と言うけれど・・・)

      数値(整数)型の定義サイズについて、質問です。 ANSIの規格では、 sizeof(short) ≦ sizeof(int) ≦ sizeof(long) としか定義されていないので、実際にこれらの型が取る大きさは処理系依存だ、と聞きます。 しかし、VC++、BCCなど、知名度の高いコンパイラでは、いずれも、 sizeof(short) → 2 sizeof(int) → 2 sizeof(long) → 4 となっているようです。(手元にないので、gccでは確認していませんが・・・) 実際のところ、上記のサイズにならない処理系は実在するのでしょうか? 何故こんな質問をするのかというと、あるテキスト(事情があって、書名等の情報は出せないのですが)に > 次の sizeof 演算子の返す値として正しいものはどれですか。 > > long hoge[32]; > sizeof(hoge); > ------------------------------------------------------ > A. 32 > B. 64 > C. 128 > D. 256 > E. 512 という問題が掲載されており、解説が、 > 正解は C 。 > > long 型は 4 バイトで構成されるので、32 個の要素がある配列では、 128 バイトになります。 となっていたのです。(short型のサイズを問う類題あり) 特定の処理系が前提条件とされていないので、適切な設問、解説とは思えないのですが、誤りと断言できるほどの自信がないため、作者に指摘すべきか否か、迷っています。 sizeof(short) → 2、sizeof(long) → 4 にならない処理系が実在しなければ、規格の定義上は正しくなくても、実務上は誤りとは言えないような気もしますが、どうでしょうか? コメントをお待ちしております。  

  • intとlongは同じ?

    #include <stdio.h> #include <limits.h> int main() { printf("%d\n%d", INT_MAX, LONG_MAX); return 0; } 出力 214783647 214783647 Win7 64bit (VC++2010) CentOS 32bit (gcc) どちらの環境でも同じ出力結果となりました。 intとlongなぜ同じになってしまったのでしょうか。

  • ROWIDの桁数

    Oracle9iを使用しております。 使用OSは、WINDOWS98、WINDOWS2000、WindowsXP、Windows2003Serverです。 タイトルにあるとおり、ROWIDの最大桁数は、何バイトでしょうか?

  • STLのto_stringにlong double

    こんばんは。 STLにto_string関数を見つけました。 変数の型を見るとlong doubleもサポートしているようなので値を入れてみたところfloat値を文字列に変換したものしか得られませんでした。 どのようにすればlong doubleを文字列として取得できるのでしょうか? 環境はVisualStudio2013です。

  • long long型について

    long long型を使用したいのですが、 コンパイルすると『未サポート』の警告がでます。 ※以前、下記質問をさせてもらいました。  http://okwave.jp/qa3407843.html​  http://okwave.jp/qa3425683.html OS:Vine Linux3.1 コンパイラ:gcc-3.2.2 になります。 また、__STDC_VERSION__が199901Lに定義もされていました。 以上、宜しく御願い致します。

  • PyQuanteのインストールの際にエラーについて

    pythonをインストールしコマンドプロンプト上で >python setup.py build -c mingw32 install を入力した際に error: command 'gcc' failed: No such file or directory といったエラーが出ます。 調べていろいろ試してみましたが対処法がわかりません。環境設定もできていて、必要なものは全てインストール済みです。OSはWindous Vista 32bitです。

専門家に質問してみよう