Qlong-double

long double データ型のデフォルトのサイズを変更します。

構文

Linux*:

なし

Windows*:

/Qlong-double

引数

なし

デフォルト

オフ

long double データ型のデフォルトのサイズは 64 ビットです。

説明

このオプションは、long double データ型のデフォルトのサイズを 80 ビットに変更します。

ただし、このデータ型は 16 バイトでアライメントする必要があり、サイズはアライメントの倍数でなければならないため、Windows* では long double のサイズは 16 バイトになります。16 バイトの下位 10 バイト (80 ビット) にのみ、有効なデータが格納されます。

Windows* プラットフォームで Qlong-double コマンドライン・オプションを使用するには、double extended precision 浮動小数点型 (FP80) を使用するソースコードを、その使用を考慮またはサポートする方法で記述されていないソースコードと注意深く切り分ける必要があります。このオプションを使用すると、FP80 値のサイズやレイアウトを想定したり、要求するソースコードでは、コンパイル時、リンク時、または実行時にさまざまな不具合が発生する可能性があります。

Microsoft* C 標準ライブラリーと and Microsoft* C++ 標準テンプレート・ライブラリーは、FP80 データ型をサポートしていません。このオプションを使用する場合は、ライブラリーが FP80 データ型形式をサポートしているかどうかを必ず確認してください。

例えば、Microsoft* コンパイラーと Microsoft* が提供するライブラリー・ルーチン (printflong double 数学関数など) は、80 ビット浮動小数点値をサポートしていないためQlong-double コマンドライン・オプションでコンパイルされるコードから呼び出されるべきではありません。

Microsoft* Visual Studio* 2019 バージョン 16.10 以降では、<complex> ヘッダー、<xutility> ヘッダー、または <cmath> ヘッダーを直接または間接的に含むプログラムで /std:c++latest と /Qlong-double を一緒に指定するとコンパイルエラーになる場合があります。以下の「例」セクションを参照してください。

IDE オプション

なし

代替オプション

なし

上記のとおり、<complex> ヘッダー、<xutility> ヘッダー、または <cmath> ヘッダーを直接または間接的に含むプログラムで /std:c++latest と /Qlong-double を一緒に指定すると問題が発生する場合があります。以下は、この問題の例です。


#include <iostream>
#include <complex>

int main()
{long double ld2 = 1256789.98765432106L;int iNan = isnan(ld2);std::cout << "Hello World!\n"; }

ksh-3.2$ icl -c -EHsc -GR    -std:c++latest /Qlong-double /MD  test1.cpp
Intel® C++ Intel® 64 Compiler Classic for applications running on Intel® 64, Version xxx Build xxxx
Copyright (C) 1985-2021 Intel Corporation.  All rights reserved.

test1.cpp
c:/Program files/Microsoft Visual Studio/2022/Preview/VC/Tools/MSVC/14.29.30130/include/xutility(5918): error: no instance of function template "std::_Bit_cast" matches the argument list
            argument types are: (const long double)
      const auto _Bits = _Bit_cast<_Uint_type>(_Xx);
                         ^
c:/Program files/Microsoft Visual Studio/2022/Preview/VC/Tools/MSVC/14.29.30130/include/xutility(67): note: this candidate was rejected because at least one template argument could not be deduced
  _NODISCARD _CONSTEXPR_BIT_CAST _To _Bit_cast(const _From& _Val) noexcept {
                                     ^
          detected during:
            instantiation of "auto std::_Float_abs_bits(const _Ty &) [with _Ty=long double, <unnamed>=0]" at line 5967
            instantiation of "bool std::_Is_finite(_Ty) [with _Ty=long double, <unnamed>=0]" at line 1307 of "c:/Program files/Microsoft Visual Studio/2022/Preview/VC/Tools/MSVC/14.29.30130/include/cmath"
            instantiation of "_Ty std::_Common_lerp(_Ty, _Ty, _Ty) noexcept [with _Ty=long double]" at line 1392 of "c:/Program files/Microsoft Visual Studio/2022/Preview/VC/Tools/MSVC/14.29.30130/include/cmath"

compilation aborted for test1.cpp (code 2)