سؤال

FORTRAN يوفر العديد من الوظائف لتحويل الدقة المزدوجة رقم لا يتجزأ القيمة.الطريقة المستخدمة الاقتطاع/التقريب يختلف.أنا تحويل العلمية المعقدة الخوارزميات التي تستخدم هذه.

وفقا FORTRAN الوثائق:
ليس(x) إرجاع قيمة التكامل بين x و 0 ، أقرب x.
anint(x) يعود لأقرب جزء لا يتجزأ من قيمة x, إلا نصف الحالات تقريب إلى جزء لا يتجزأ من قيمة أكبر في الحجم.
nint(x) يحول x إلى الباحث تنسيق التقريب إلى أقرب الباحث القيمة ، باستثناء في منتصف الطريق من الحالات يتم تقريب إلى الباحث قيمة أكبر في الحجم.

ولا يوجد أي تنفيذ هذه في C# ؟ قد يكون صعب الحصول على ذلك الحق.

(int) × يبدو أن المباراة ليس()
تحويل.ToInt32(x) لا يطابق أي من أعلاه.
Trunc(x) لا يطابق أي من أعلاه.
الجولة(x) قد تطابق anint أو nint.

الفرق بين anint و nint يبدو أن عودة النوع ، حيث anint ترجع الدقة المزدوجة القيمة ولكن nint بإرجاع عدد صحيح.وتستخدم على حد سواء (acutal العينة):
الدقة المزدوجة A, B, C, D, E, F, G
...مجموعة القيم هنا ...
F = ANINT(A-B) + ANINT(ج-د) + ANINT(B+D-E)
ز = NINT(F) + 1D0;
ربما FORTRAN الخبراء يمكن أن تساعد على توضيح لماذا اختار الكاتب إلى استخدام كل من (أنا على افتراض أنه كان متعمدا).

هل كانت مفيدة؟

المحلول

من تعريفات المكالمات ، nint و anint يتم توفيرها من قبل Math.Round باستخدام MidpointRounding.AwayFromZero.

بالنسبة aint, صريح من الزهر double إلى int تحقيق تلك النتيجة.

نصائح أخرى

من ما أستطيع أن أرى ، aint() هو فقط Math.Floor().

عن اثنين آخرين ، أعتقد أنك الحق أن الفرق الوحيد هو عودة نوع: nint() بإرجاع صحيح الفعلية ، في حين anint() يعود مزدوجة (fortran:الحقيقي) الذي يحدث أن يكون جزءا لا يتجزأ القيمة.

يجب تنفيذ وظيفة anint ، اتبع التعليمات البرمجية:

double anint(double x)
{
    int a;
    double y;

    a = (int)x; //a=9

    if (10 * x - 10 * (double)a >= 5)
    {
        a = a + 1;
    }

    y = (double)a;

    return y;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top