大きな数の分割を含むいくつかの問題を解決しようとしていました。C++の整数整数部の天井
LL結果=(LL)はceil((ダブル)( - B)/ C)、a、b、cは、長い長い整数(LL)は:私は私が使用して間違った結果を得ている特定のシナリオにつまずきました。
#include <stdio.h> /* printf */
#include <math.h> /* ceil */
#define LL long long
int main()
{
LL a= 10000000000000000;
LL aa = 10000000000000000-1;
LL aaa = 10000000000000000+1;
int b = 1;
int c = 1;
printf ("%Ld\n", (LL)ceil((double)(a-b)/c));
printf ("%Ld\n", (LL)ceil((double)(aa-b)/c));
printf ("%Ld\n", (LL)ceil((double)(aaa-b)/c));
return 0;
}
Output:
10000000000000000
9999999999999998
10000000000000000
これは以上10^16に等しい整数に発生し始め、10
で割り切れる長い長の上限は約10^18です。
このエラーの原因は何ですか?
私はGCC 5.1をC++ 14モード(ideone.com上)で使用しています。
どのプラットフォームとコンパイラを使用していますか? – TriskalJM
私はIdeone(C++ 14)が使用するコンパイラを試しました。ここにコードへのリンクがあります:http://ideone.com/aT6nem – gautamk
倍精度の精度は52ビット= 15桁です。 – stark