11

TLDR: 警告なしで 32 ビットと 64 ビットの両方の CGFloats をコンパイルする方法で、標準の浮動小数点コードを呼び出すにはどうすればよいですか?


CGFloat は、コンパイラの設定とプラットフォームに応じて、double または float として定義されます。多くの警告を生成することなく、両方の状況でうまく機能するコードを書こうとしています。

floor、abs、ceil、およびその他の単純な浮動小数点演算などの関数を使用すると、値が切り捨てられるという警告が表示されます。例えば:

警告: 暗黙的な変換により、64 ビット値が 32 ビット値に短縮されます

すべての関数の倍精度バージョン (floorf の代わりに floor など) を常に使用できることを認識しているため、計算の正確性や精度の低下については心配していません。ただし、これらのエラーを許容する必要があります。

多くの #ifdef __ LP64 __ を使用したり、すべての標準浮動小数点関数のラッパー関数を記述したりすることなく、32 ビットと 64 ビットの両方の浮動小数点数をサポートするコードをきれいに記述する方法はありますか?

4

2 に答える 2

19

からこれらの機能を使用できますtgmath.h

#include <tgmath.h>

...

double d = 1.5;
double e = floor(d);   // will choose the 64-bit version of 'floor'

float f = 1.5f;
float g = floor(f);    // will choose the 32-bit version of 'floorf'.
于 2011-10-08T05:32:49.747 に答える