Meniru Aritmetik Ketepatan Berganda dengan Terapung Ketepatan Tunggal
Dalam bidang sistem terbenam dengan keupayaan titik terapung terhad, keperluan timbul untuk meniru struktur data ketepatan dua kali menggunakan struktur ketepatan tunggal. Artikel ini menangani cabaran untuk melaksanakan operasi penambahan dan perbandingan berketepatan dua kali menggunakan pasangan apungan ketepatan tunggal.
Perbandingan
Membandingkan dua nilai berganda yang dicontohi ialah urusan yang mudah. . Kami menggunakan susunan leksikografi, membandingkan unsur tuple secara berurutan. (d1.hi > d2.hi) ATAU ((d1.hi == d2.hi) DAN (d1.rendah > d2.rendah))
Tambahan
Meniru penambahan ketepatan berganda terbukti lebih rumit. Kita perlu menentukan asas untuk digunakan dan kaedah untuk mengesan pembawa.
Pemilihan Asas
FLT_MAX ialah pangkalan yang tidak sesuai kerana ia memperkenalkan isu limpahan dan aliran bawah yang tidak diingini. Sebaliknya, kami menggunakan format titik terapung dengan julat eksponen yang lebih besar tetapi ketepatan yang dikurangkan, dirujuk sebagai "double-float."
Carry Detection
Let d1 and d2 ialah dua nilai berganda yang ditiru untuk ditambah. Kami mula-mula menjumlahkan d1.hi dan d2.hi:
result.hi = d1.hi + d2.hi
Jika result.hi melimpah, kami tahu ada carry. Dalam kes ini, kami mengurangkan result.hi dengan 1 dan menambah 1 kepada result.low. Jika result.hi underflow, kami menambahnya sebanyak 1 dan tolak 1 daripada result.low.
if (result.hi overflowed) { result.hi--; result.low++; } else if (result.hi underflowed) { result.hi++; result.low--; }
Kami kemudian menambah d1.low dan d2.low kepada result.low:
result.low += d1.low + d2.low
Jika result.low melimpah, kami menambah result.hi sebanyak 1. Jika ia underflow, kami mengurangkan result.hi sebanyak 1.
if (result.low overflowed) { result.hi++; } else if (result.low underflowed) { result.hi--; }
Akhir sekali, kami mengembalikan hasil berganda yang dicontohi dengan (result.hi , result.low).
Metodologi ini, berdasarkan hasil kerja Dekker dan Kahan, membolehkan kami meniru penambahan ketepatan dua kali dengan ketepatan dan kecekapan yang munasabah dalam persekitaran yang terhad kepada aritmetik ketepatan tunggal.
Atas ialah kandungan terperinci Bagaimanakah penambahan ketepatan dua boleh dicontohi menggunakan terapung ketepatan tunggal dalam sistem terbenam?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!