Bagaimanakah penambahan ketepatan dua boleh dicontohi menggunakan terapung ketepatan tunggal dalam sistem terbenam?

Patricia Arquette
Lepaskan: 2024-10-31 08:02:29
asal
381 orang telah melayarinya

How can double-precision addition be emulated using single-precision floats in embedded systems?

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
Salin selepas log masuk

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--;
}
Salin selepas log masuk

Kami kemudian menambah d1.low dan d2.low kepada result.low:

result.low += d1.low + d2.low
Salin selepas log masuk

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--;
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan