-2

私は、何千もの個々のパーセンタイルを見つける必要があるプログラムを作成していますが、そのほとんどは .00005 未満です。現在、これを行うために私は使用しています

0.5 * erfc(-zScore * M_SQRT1_2)

ただし、これはわずかに丸められているようです (私のプログラムの残りの部分では、double と long double を使用しているため、これでなければなりません)。最後に、すべてのパーセンタイルを合計すると 1.835468 になるので、私はこれを信じています。これは、1、または少なくとも 1 に非常に近い数を合計する必要があるため、丸めていることを示しています。さらに、個々のパーセンタイルをログに記録すると、いくつかのパーセンタイルに対して同じ数値 (0.000036 としましょう) が得られます。その後、0.000035 まで下がります。各数値は前回よりも平均から離れているため、毎回低下するはずです。

Z スコアに基づいて非常に正確なパーセンタイルを見つける方法が必要ですが、小数点第 6 位で四捨五入が早すぎるため、これは得られません。

4

2 に答える 2

1

0.000036 から 0.000035 に跳ね上がるのは、 を使用する必要があるためですNSLog(@"Value is: %0.36f", yourPercentile);。実際には 6 桁で丸められていないことがわかりますが、それがログに記録された方法です。

さて、あなたのエラーは、正確な値をうまく保存しない double を使用しているという事実から来ています。まず、必要な精度を把握し、そのレベルの精度を処理できる型を使用する必要があります。

12 桁の精度が必要であると判断したとします。

long long は 19 桁を格納できるため、使用するのに適した単位です。元の値を計算するときは、元の値に 100,000,000,000 を掛けて long long として保存する必要があります。次に、大きな値を使用して必要な計算を行います。最終的に、結果が得られたら、同じ値 (整数として表示する場合は 2 桁少ない値) で割り、パーセンテージを取得します。

于 2013-01-12T18:55:30.317 に答える
0

数値のフォーマットの問題だと思います.2つの値(long double)が互いに非常に近いが、それでも異なる場合、それらが等しいことがわかります。「%.12Lf」などでフォーマットを指定してください。

于 2013-01-12T18:27:58.997 に答える