Mereka tidak menyimpan π dengan presisi floating-point yang tidak biasa. Mereka menggunakan nilai yang salah untuk π dengan presisi ganda. Untuk perkiraan 3,1415926536 dalam biner, setidaknya 38 bit diperlukan:
3.14159265359922… > 11.001001000011111101101010100010001001
Perhatikan bahwa 2 ^ -36 adalah tentang 1.5e-11, yang bertepatan dengan trailing 99. floating-point presisi ganda memiliki signifikansi 52-bit. Untuk mengevaluasi cos(pi/2)
sebagai -5e-12, satu-satunya pilihan lain yang mungkin adalah tipe 48-bit, yang akan sangat aneh.
Dekat 0 dan π, di mana turunannya hampir nol, cos (θ) tidak dapat dihitung dengan sangat akurat:
cos(3.1415926536) ≈ -0.999999999999999999999947911
Itu berbeda dari -1 sekitar 5,2e-23, yang lebih kecil dari ε untuk double
, jadi cos(3.1415926536)
dihitung dengan tepat -1 ... yang tidak benar.
Dekat ± π / 2, turunan [ -sin (θ) ] hampir ± 1, sehingga kesalahan pada input menjadi output.
cos(1.57079632679961) ≈ -4.71338076867830836e-12
cos(1.57079632679962) ≈ -4.72338076867830836e-12
cos(1.57079632680000) ≈ -5.10338076867830836e-12
Saya kebetulan memiliki kalkulator TI yang menampilkan satu digit lebih sedikit dan menghitung cos(π/2)
sebagai -5.2e-12. Namun, ini sangat berbeda secara elektronik dan dirancang untuk memberikan nilai tepat cos(90°)
.
Saya akan menebak bahwa di Spotlight, cos(pi/2)
sedang dihitung dengan mengambil nilai untuk π, mengkonversi ke string desimal , menyimpannya sebagai nilai biner (tepat, rasional) 11.0010010000111111011010101000100010010010101010101111 (atau 10000), membaginya dengan 2, dan kemudian pada dasarnya mengurangkan dari nilai sebenarnya dari π / 2. Anda harus mencari tahu apakah cos(pi/2 + cos(pi/2))
lebih dekat ke nol (mungkin -2.2e-35).
Perkalian dengan kekuatan dua seharusnya hanya mempengaruhi eksponen, bukan signifikan. Dimungkinkan untuk menentukan bagaimana pembulatan diterapkan dengan membagi dua atau menggandakan.