Pertanyaan Ganda - IEEE 754 alternatif


Menurut situs berikut: http://en.cppreference.com/w/cpp/language/types

msgstr "double - double precision floating point type. Biasanya IEEE-754 64 bit floating point type".

Ia mengatakan "biasanya". Apa format / standar lain yang mungkin bisa C ++ double menggunakan? Apa yang menggunakan kompilator alternatif untuk format IEEE? Atau arsitektur?


6
2018-02-23 17:57


asal


Jawaban:


Vaxen, Crays, dan mainframe IBM, untuk menyebutkan hanya beberapa yang masih cukup luas digunakan. Sebagian besar (semua?) Dari mereka juga dapat melakukan floating point IEEE sekarang, tetapi kadang-kadang hanya dengan add-on khusus. Dalam kasus lain (IBM) aritmatika IEEE dapat membawa hukuman kecepatan yang signifikan.

Sedangkan untuk mesin yang lebih tua, kebanyakan mainframe (Unisys, Control Data, dll.) Menggunakan format floating point yang unik, yang kebanyakan bahkan tidak seperti IEEE, belum lagi benar-benar sesuai.


6
2018-02-23 18:15



Untuk pelajaran sejarah singkat, Anda dapat memeriksa Studi Kasus Intel Floating Point.

Intel compiler memiliki opsi yang diaktifkan secara default ketika mengoptimalkan yang memungkinkan apa yang disebut fitur matematika cepat. Ini membuat matematika jauh lebih cepat tetapi menurunkan kepatuhan yang ketat dengan standar IEEE. Satu dapat menegakkan kepatuhan standar yang ketat dengan pilihan fp-model.

Saya percaya bahasa CUDA untuk NVidia GPU juga memiliki perpustakaan matematika yang lebih cepat secara signifikan jika seseorang mau menyerahkan kepatuhan yang ketat dengan standar IEEE. Ini tidak hanya membuat matematika lebih cepat, tetapi mengurangi jumlah register yang digunakan untuk fungsi transendental pada khususnya.

Apakah kepatuhan diperlukan tergantung pada basis kasus per kasus. Kami mengalami masalah dengan pengoptimalan Intel dan harus menyalakannya fp-model strict pilihan untuk memastikan hasil yang benar dengan matematika presisi ganda.


3
2018-02-23 18:14



Sepertinya kebanyakan komputer saat ini menggunakan IEEE-754. Tetapi alternatif tampaknya telah tersedia sebelumnya. Format seperti kelebihan 128 dan dikemas BCD telah digunakan sebelumnya (http://aplawrence.com/Basics/floatingpoint.html). Entri wikipedia juga memiliki beberapa daftar http://en.wikipedia.org/wiki/Floating_point


2
2018-02-23 18:24



Hal ini mungkin layak ditambahkan, sebagai jawaban untuk "Apa format lain yang mungkin / standar dapat digunakan C ++ ganda?", Bahwa gcc untuk Atmel AVR (yang merupakan data 8 bit CPU, yang digunakan dalam beberapa Arduinos) tidak mengimplementasikan double sebagai 64 bit.

Lihat GCC wiki, halaman avr-gcc dan khususnya 'Ganda' ayat dari 'Penyimpangan dari Standar' di mana dikatakannya

double hanya 32 bit lebar dan diimplementasikan dengan cara yang sama    float

Saya yakin CPU lain memiliki implementasi serupa, tetapi saya tidak dapat menemukannya.


0
2017-09-15 09:49