Di Excel, ketika saya memasukkan 22222.09482 maka saya melihat angka 22222.0948199999 di bilah rumus

28

Bisakah Anda membantu - karena saya memiliki situasi aneh bahwa ketika saya memasukkan nomor 22222.09482 dalam sel maka saya melihat nomor yang berbeda 22222.0948199999 di bilah rumus. Di bawah ini adalah cuplikan dari masalahnya.

Kesalahan sampel

Saya melihat perilaku yang sama ketika saya memasukkan angka-angka berikut:

22222.09482
33333.09482
44444.09482
55555.09482

tetapi ketika saya memasukkan 11111.09482 dan 66666.09482, 77777.09482 .. sampai 99999.09482 maka mereka menunjukkan dengan benar. Saya tidak yakin apakah ini terkait dengan pembulatan? Saya tidak menyiapkan profil pembulatan. Bisakah Anda membantu saya menyelesaikan masalah ini?

pengguna954171
sumber
1
Rapi temukan, apakah sama untuk saya - dapatkah Anda gunakan ROUND()? =ROUND(A1,5), lalu salin / tempel data sebagai Nilai dan hapus nomor aslinya?
BruceWayne
1
@BruceWayne, yang menarik ROUND()menunjukkan angka yang benar tetapi nilai salin / tempel membawanya kembali ke masalah awal!
Rey Juna
1
@ReyJuna - Kemudian lakukan ROUND(A1,5)lagi pada nilai yang ditempelkan. Kemudian salin / tempel sebagai nilai, dan Round()lagi, lalu salin / tempel. ...: P ... itu menarik, dan sepertinya @EugenRieck punya alasan. Pertanyaan bagus!
BruceWayne
1
Apakah Anda benar-benar peduli tentang perbedaan antara 22222.09482 dan 22222.0948199999? Ini perbedaan 5 bagian dalam 100 triliun.
Russell Borogove
4
Apakah matematika floating point rusak? . Namun itu kemungkinan bug, karena doublememiliki presisi yang cukup bahwa ketika dibulatkan menunjukkan nilai yang benar seperti yang diharapkan kebanyakan orang
phuclv

Jawaban:

31

Itu adalah bug.

Excel menggunakan representasi presisi ganda IEEE yang biasa, menurut jawaban lain. Ketepatannya adalah 53 digit biner yang signifikan, yang sesuai dengan kira-kira 16 digit desimal.

Itu selalu "aman" untuk menampilkan 15 angka desimal signifikan pertama. Dalam arti bahwa setiap angka "disajikan" desimal yang diberikan dengan 15 digit dapat dengan aman dibedakan dari angka-angka yang diperoleh dengan mengubah angka desimal ke-15 satu. Misalnya, angka 15 digit:

22222.09481 99999
22222.09482 00000
22222.09482 00001

peta ke tiga angka presisi ganda yang berbeda . Tidak satu pun dari ketiga ini akan menjadi "tetangga" dalam representasi presisi ganda, dalam kasus khusus ini.

Jadi, membingungkan dua yang pertama di layar pengguna, adalah bug dari Excel.

Bahkan, dalam domain ini (antara 16384 dan 32768), ketepatan absolutnya adalah 2 -38 , dan angka-angka berikut ini dapat diwakili:

...
22222.09481 99998 96571 9714760780334472656250000
22222.09481 99999 00209 9502831697463989257812500 <-- the one closest to what Excel showed to the user
22222.09481 99999 03847 9290902614593505859375000
22222.09481 99999 07485 9078973531723022460937500
22222.09481 99999 11123 8867044448852539062500000
22222.09481 99999 14761 8655115365982055664062500
22222.09481 99999 18399 8443186283111572265625000
22222.09481 99999 22037 8231257200241088867187500
22222.09481 99999 25675 8019328117370605468750000
22222.09481 99999 29313 7807399034500122070312500
22222.09481 99999 32951 7595469951629638671875000
22222.09481 99999 36589 7383540868759155273437500
22222.09481 99999 40227 7171611785888671875000000
22222.09481 99999 43865 6959682703018188476562500
22222.09481 99999 47503 6747753620147705078125000
22222.09481 99999 51141 6535824537277221679687500
22222.09481 99999 54779 6323895454406738281250000
22222.09481 99999 58417 6111966371536254882812500
22222.09481 99999 62055 5900037288665771484375000
22222.09481 99999 65693 5688108205795288085937500
22222.09481 99999 69331 5476179122924804687500000
22222.09481 99999 72969 5264250040054321289062500
22222.09481 99999 76607 5052320957183837890625000
22222.09481 99999 80245 4840391874313354492187500
22222.09481 99999 83883 4628462791442871093750000
22222.09481 99999 87521 4416533708572387695312500
22222.09481 99999 91159 4204604625701904296875000
22222.09481 99999 94797 3992675542831420898437500
22222.09481 99999 98435 3780746459960937500000000 <-- the one closest to what the user types
22222.09482 00000 02073 3568817377090454101562500
22222.09482 00000 05711 3356888294219970703125000
22222.09482 00000 09349 3144959211349487304687500
22222.09482 00000 12987 2933030128479003906250000
22222.09482 00000 16625 2721101045608520507812500
22222.09482 00000 20263 2509171962738037109375000
22222.09482 00000 23901 2297242879867553710937500
22222.09482 00000 27539 2085313796997070312500000
22222.09482 00000 31177 1873384714126586914062500
22222.09482 00000 34815 1661455631256103515625000
22222.09482 00000 38453 1449526548385620117187500
22222.09482 00000 42091 1237597465515136718750000
22222.09482 00000 45729 1025668382644653320312500
22222.09482 00000 49367 0813739299774169921875000
22222.09482 00000 53005 0601810216903686523437500
22222.09482 00000 56643 0389881134033203125000000
22222.09482 00000 60281 0177952051162719726562500
22222.09482 00000 63918 9966022968292236328125000
22222.09482 00000 67556 9754093885421752929687500
22222.09482 00000 71194 9542164802551269531250000
22222.09482 00000 74832 9330235719680786132812500
22222.09482 00000 78470 9118306636810302734375000
22222.09482 00000 82108 8906377553939819335937500
22222.09482 00000 85746 8694448471069335937500000
22222.09482 00000 89384 8482519388198852539062500
22222.09482 00000 93022 8270590305328369140625000
22222.09482 00000 96660 8058661222457885742187500
22222.09482 00001 00298 7846732139587402343750000
...

Untuk menguraikan lebih jauh, cobalah mengetik 22222.09482di satu sel, dan mengetik 22222.0948199999(lima trailing nines) di sel lain. Excel harus memilih dua perwakilan IEEE yang ditunjukkan oleh panah di atas. Dan saya pikir itu benar, karena Anda dapat menghitung perbedaan dari dua sel ini untuk mendapatkannya 9.82254E-11. Namun keduanya ditampilkan dengan cara yang sama.

Jika Excel telah menunjukkan 17 digit pertama, itu akan membantu untuk memilih dengan tepat apa nomor IEEE "di bawah" angka desimal. Dalam hal itu:

22222.0948199999 --> 22222.09481 99999 00
22222.09482      --> 22222.09481 99999 98

Tetapi menunjukkan 15 digit dibulatkan dengan cara yang salah, menyesatkan dan tidak membantu.


Sebelum ada yang mengklaim itu disengaja, lalu mengapa 8.7tidak menunjukkan perilaku yang sama? Nomor presisi ganda terdekat 8.7adalah:

8.69999999999999 93

jadi itu harus menunjukkan seolah 8.69999999999999ini disengaja. Tapi ternyata tidak.

Jeppe Stig Nielsen
sumber
9
Anda benar, ini bug. Algoritme untuk mengonversi angka titik mengambang biner yang menampilkan angka signifikan paling sedikit adalah sulit, tetapi diketahui. Sepertinya seseorang melewatkan beberapa detail penting.
Mark Ransom
2
@Ruslan Saya telah melihat banyak utas tentang aritmatika titik apung, di Stack Overflow dan situs SE lainnya, dan sering kali orang memberikan jawaban dengan semua jenis kebenaran umum dan gagasan tentang titik mengambang (biner), tanpa berkaitan dengan angka aktual dan memverifikasi apakah perilaku itu sesuai dengan IEEE. Saya pikir saya bisa memposting pertanyaan "Mengapa 2.1 + 2.2kembali 4.80000001?" dan mendapatkan banyak jawaban dengan mengatakan bahwa itulah yang harus saya harapkan ketika saya menggunakan floating point.
Jeppe Stig Nielsen
1
@benshepherd: tangkapan layar LibreOffice tidak menunjukkan apa yang ditunjukkan tangkapan layar Excel
Thomas Weller
1
@JeppeStigNielsen: 2.1 + 2.2 = 4.8? Itu hanya 0,5 off. Itu normal.
Thomas Weller
@ Markarkom: jadi, Excel benar-benar mengimplementasikannya sendiri? Excel tidak diimplementasikan dalam C ++ atau sesuatu yang melakukan perhitungan floating point itu? Itukah yang kamu katakan? Atau apakah bug di C ++ sudah, sehingga mempengaruhi jutaan aplikasi?
Thomas Weller
22

Excel menyimpan angka dalam format floating point 64-bit biner IEEE 754 . Kuncinya adalah "toko" - perubahan dari desimal ke biner terjadi setiap kali nomor disimpan, bukan hanya ketika digunakan dalam perhitungan aktual.

Artikel bagus tentang ini ada di Understanding Floating Point Precision, alias “Mengapa Excel Memberi Saya Jawaban yang Salah?”

Dimungkinkan untuk membuat program spreadsheet yang akan menangani angka sangat besar dengan banyak angka signifikan. Tapi itu tidak terlalu praktis. Excel dapat dirancang untuk menggunakan format IEEE 754 decimal128 , yang memungkinkan 34 angka desimal - lebih dari cukup untuk menyimpan 22222.09482. Tetapi sebaliknya menggunakan format binary64 Double Precision yang jauh lebih umum , yang memiliki presisi 53 bit, yang hanya di bawah 16 digit. Meskipun Anda mungkin berpikir itu akan cukup untuk angka dengan hanya 10 digit di dalamnya, konversi dari desimal ke biner sedikit mempersulit - yaitu, 2222209482 dapat disimpan 100% dengan benar sebagai angka binary64, tetapi 22222.09482 tidak dapat.

Ingatlah bahwa spreadsheet biasanya digunakan untuk data keuangan, yang biasanya tidak memerlukan begitu banyak digit ketepatan, atau untuk pemodelan "bagaimana jika" dalam berbagai skenario, di mana tingkat presisi super tinggi tidak diperlukan. Tentu saja ada alat-alat lain (dan mungkin program spreadsheet lainnya, tetapi saya belum mencari akhir-akhir ini) yang secara default atau dengan pengaturan konfigurasi khusus dapat menggunakan format numerik yang lebih besar, tetapi Excel bukan salah satunya.

Bagi mereka yang menunjukkan bahwa LibreOffice menangani ini dengan lebih baik, penampilan dapat menipu. Lihat posting ini untuk lebih jelasnya. Tampaknya LibreOffice menangani angka besar sedikit berbeda tetapi memiliki representasi floating point 64-bit dasar yang sama dengan masalah yang sama.

manassehkatz-Reinstate Monica
sumber
3
Jawaban ini akan lebih baik jika juga menjelaskan pengamatan bahwa beberapa angka dengan desimal ditampilkan persis seperti yang dimasukkan - seperti 11111.09482 dalam contoh OP.
andrew
11
Hanya untuk bersenang-senang: 22222.09482disimpan seperti 1.0101101100111000011000010001100001111110011111000000₂ * 2₁₀^(10000001101₂ - 1023₁₀)di IEEE 754, atau dengan kata lain tepatnya 1.35632902954101553 * 2^14, yaitu 22222.0948199999984353787904.
YoYoYonnY
1
Binary64 (alias ganda presisi) adalah lebih dari cukup untuk sebuah angka dengan angka desimal sepuluh. Tentu saja itu tidak dapat direpresentasikan secara tepat, tetapi sebagian besar bilangan, termasuk 0.2dan 0.1tidak dapat diwakili secara tepat (fraksi 1/5 (seperlima) memiliki ekspansi biner berulang yang tak terbatas). Namun, Excel menunjukkan hal-hal dengan cara yang membingungkan.
Jeppe Stig Nielsen
2
"Ingatlah bahwa biasanya spreadsheet digunakan untuk data keuangan, yang biasanya tidak memerlukan begitu banyak digit ketepatan" - ini umumnya sangat salah - data keuangan memerlukan perilaku yang tepat dalam arti "apa yang Anda ketikkan adalah apa yang Anda harapkan akan tetap ada di sana ", Anda benar dengan konversi desimal / biner dll, tetapi argumen khusus ini tidak valid! Untuk data keuangan, kami biasanya menggunakan beberapa jenis Moneyatau BigIntegerformat, yang sering menggunakan format penyimpanan desimal .
Honza Zidek
4
Jawaban ini tidak cukup untuk menjelaskan apa yang terjadi. Kami mengamati bug di Excel, di mana angka diformat secara salah . 22222.09482 dan 22222.0948199999 adalah angka binary64 yang berbeda.
Ruslan
11

Saat melakukan perhitungannya, Excel perlu menemukan representasi biner internal yang baik untuk angka yang digunakannya. Dalam kasus Anda, ia menggunakan angka floating point, dan pada kenyataannya format data ini memiliki perkiraan (sangat bagus) untuk nomor Anda, tetapi tidak ada kecocokan persis. Jadi, jika Anda tidak secara eksplisit memberi tahu Excel format output mana yang akan digunakan, itu akan melakukan "upaya terbaik", menghasilkan output yang lebih dekat dengan nilai yang dihitung secara internal, tetapi bukan teks yang Anda masukkan.

Hanya untuk memperjelas ini: Memahami, bahwa teks yang Anda masukkan mewakili angka dan mengubah urutan angka menjadi angka sudah memenuhi definisi "perhitungan" dari atas.

EDIT

Saya belum membuatnya cukup jelas, bahwa saya menganggap pilihan menggunakan representasi titik mengambang 64 bit sebenarnya bagus: Excel tidak ment sebagai alat untuk Ilmuwan, di mana kesalahan pembulatan dalam digit ke-11 setelah titik desimal menghasilkan dampak besar, tetapi akuntan tidak ingin kecepatan pemrosesan mereka dikurangi dengan faktor jutaan untuk mengakomodasi sumber perhitungan yang tidak tepat yang mungkin memanifestasikan dirinya dalam jumlah yang tidak pernah mereka gunakan.

Jika Anda menggunakan program spreadsheet untuk apa itu dirancang dan menggunakan format output eksplisit untuk memastikan efek tersebut tidak pernah membuatnya menjadi ranah yang terlihat, Anda akan baik-baik saja.

Eugen Rieck
sumber
1
Komentar bukan untuk diskusi panjang; percakapan ini telah dipindahkan ke obrolan .
DavidPostill
1
Jawaban ini tidak cukup untuk menjelaskan apa yang terjadi. Kami mengamati bug di Excel, di mana angka diformat secara salah. 22222.09482 dan 22222.0948199999 adalah angka binary64 yang berbeda.
Ruslan
2

Ketika saya memasukkan 11111.09482 dan 66666.09482, 77777.09482 .. hingga 99999.09482 maka mereka menunjukkan dengan benar. Saya tidak yakin apakah ini terkait dengan pembulatan? Saya tidak menyiapkan profil pembulatan. Bisakah Anda membantu saya menyelesaikan masalah ini?

Beberapa angka dapat direpresentasikan dengan benar dan beberapa tidak.

Atur presisi yang ditampilkan dengan tepat untuk perhitungan Anda dan gunakan fungsi putaran () .

  • Penjelasan:

  • Larutan:

    Anda sering dapat mencegah kesalahan pembulatan titik mengambang dari mempengaruhi pekerjaan Anda dengan mengatur opsi Presisi sebagai ditampilkan sebelum Anda menerapkan format angka ke data Anda. Opsi ini memaksa nilai setiap angka di lembar kerja berada pada ketepatan yang ditampilkan pada lembar kerja.

    1. Klik File> Opsi.
      Di Excel 2007: Klik gambar tombol Microsoft Office Button Office, lalu klik Opsi Excel.
      Gambar Tombol

    2. Klik Tingkat Lanjut, dan kemudian di bawah Saat menghitung buku kerja ini, pilih kotak centang Atur presisi sebagai ditampilkan, lalu klik OK.

    3. Klik OK.

    4. Di lembar kerja, pilih sel yang ingin Anda format.

    5. Pada tab Beranda, klik gambar Tombol Peluncur Kotak Dialog di sebelah Angka.
      Gambar Tombol Peluncur
      Gambar Pita Excel

    6. Di kotak Kategori, klik Nomor.

    7. Di kotak Tempat desimal, masukkan jumlah tempat desimal yang ingin Anda tampilkan.

    Tip: Untuk meminimalkan efek ketidakakuratan penyimpanan aritmatika titik mengambang, Anda juga dapat menggunakan fungsi ROUND untuk membulatkan angka ke jumlah tempat desimal yang diperlukan oleh perhitungan Anda.

  • Jurnal Akuntansi - " Disadap oleh kesalahan perhitungan Excel ":

    Angka ganjil tertentu membuat desimal biner berulang, dan ketika angka berulang itu terputus setelah 15 tempat, angka biner tidak mengkonversi kembali secara akurat ke nilai numerik yang dimaksud. Sebagai contoh, di semua edisi Excel, rumus 22.26 - 21.29 harus menghasilkan 0,97, tetapi sebaliknya menghasilkan 0,970000000000002. Cobalah, dan ingat untuk menambah lebar kolom dan tempat desimal Anda sehingga Anda dapat melihat masalah perhitungan.

    Kesalahan semacam itu biasanya dianggap tidak penting atau tidak penting karena jarang terwujud menjadi kesalahan perhitungan yang berarti; namun demikian, berikut adalah dua langkah yang dapat Anda ambil untuk menghilangkan potensi kesalahan titik desimal mengambang:

    1. Fungsi ROUND. Gunakan fungsi ROUND Excel untuk membulatkan nilai terhitung Anda ke tempat desimal yang diinginkan, sehingga menghilangkan kemungkinan anomali digit ke-15. Misalnya, rumus = ROUND (-21,29 + 22,26,2) secara akurat menghasilkan 0,97.

    2. Presisi. Anda bisa mengaktifkan opsi Presisi Excel sebagai Ditampilkan untuk memaksa semua rumus memotong dan membulatkan nilai yang dihitung berdasarkan angka yang terlihat.

    Untuk mengaktifkan opsi ini di Excel 2013, 2010, dan 2007, pilih File (atau Office Orb), Opsi (atau Opsi Excel), Tingkat Lanjut, dan di bagian Saat menghitung buku kerja ini, centang kotak Atur presisi seperti yang ditampilkan, dan lalu klik OK.

    Di Excel 2003, 2002, dan 2000, dari menu Alat, pilih Opsi, dan pada tab Penghitungan, di bawah Opsi Buku Kerja, centang kotak Presisi sebagai ditampilkan, lalu klik OK.

rampok
sumber
1
Penjelasannya tidak relevan: perbedaan antara angka yang diharapkan dan yang diperoleh adalah 28 ULP - terlalu banyak untuk kesalahan pembulatan alami. "Solusi" hanya menyembunyikan bug nyata.
Ruslan
Alangkah baiknya jika Anda dapat memposting itu, bersama dengan beberapa tautan yang mendukung jawaban Anda, sebagai jawaban Anda sendiri alih-alih sebagai komentar. Dengan cara itu akan menjadi perhatian user954171 dan orang-orang dapat memberikan suara untuk itu. Bisakah Anda memberikan tautan ke Laporan Bug?
Rob
Sudah ada jawaban dengan semua detail matematika yang relevan. Entah ada laporan bug tentang ini.
Ruslan
0

Seperti yang saya yakin Anda tahu, komputer secara internal hanya bekerja menggunakan nol dan yang (alias bit) dan memiliki jumlah bit yang tetap untuk mewakili nilai (biasanya 64 bit saat ini). Itu berarti bahwa jumlah nilai yang berbeda yang dapat diwakili adalah 2 pangkat 64. Itu angka yang sangat besar, tentu saja, tetapi jumlah nilai yang mungkin terbatas, sehingga tidak semua angka dapat diwakili. Ketika menemukan angka yang tidak dapat diwakilinya secara tepat, secara otomatis akan diganti dengan yang terdekat yang dapat diwakilinya. Itu yang kau lihat.

Javier Alvarado
sumber
Apakah Anda menyatakan itu karena konversi basis angka, atau karena jumlah memori yang terbatas per nilai? Dalam kedua kasus tersebut, alasan Anda salah. Secara teknis, sangat mungkin untuk memiliki angka arbitrase presisi dan panjang arbitrer - dengan asumsi memori tak terbatas Sebagai contoh, ada bignum GNU. Selain itu, tidak ada kebutuhan inheren untuk menyandikan angka dalam format lossy. Jadi tidak ada ilmu komputer yang salah, atau angka biner. Hanya pengembang Excel yang memilih pengkodean angka yang merupakan input pengguna lossy.
phresnel
-1

Komputer melakukan matematika mereka dalam biner, dan hampir selalu menggunakan floating point untuk nilai-nilai non-integer. Satu-satunya nilai fraksional yang dapat direpresentasikan secara tepat dalam floating point harus merupakan penjumlahan dari beberapa kombinasi kekuatan fraksional dari 2 (1/2, 1/4, 1/8, 1/16, 1/32, ...) terminating pada batas presisi yang dirancang-dalam (biasanya 53 bit). Nilai-nilai ini tidak selalu memiliki representasi yang rapi atau tepat dalam desimal, dan sebaliknya, tidak semua nilai fraksional yang Anda dapat wakili dengan tepat dalam desimal akan memiliki representasi yang tepat dalam biner. Misalnya: 0,1. Itu tidak dapat direpresentasikan sebagai jumlah kekuatan pecahan dari 2 yang tidak berlangsung selamanya.

Ketika Anda memasukkan nilai desimal ke dalam spreadsheet Anda, itu akan dikonversi dan disimpan dalam biner, dan kasus-kasus seperti yang Anda jelaskan, akan menjadi perkiraan terdekat yang dapat direpresentasikan dalam biner. Ketika ditampilkan, itu dikonversi kembali ke desimal, lagi-lagi membutuhkan perkiraan, yang mungkin tidak dikonversi kembali ke representasi yang sama persis seperti yang Anda masukkan.

Mengapa 53 bit (memberi atau menerima)? Karena standar tipikal untuk menyimpan floating point "presisi ganda" menggunakan 64 bit, di mana terdapat mantissa (juga disebut signifikansi), indikator tanda, dan eksponen. Eksponen biasanya dialokasikan 10 bit, tandanya mengambil satu, meninggalkan 53 untuk mantissa. Ini untuk penyimpanan. Perhitungan biasanya dilakukan dengan menggunakan 80 bit dan dibulatkan ke belakang.

Ada situasi di mana komputer akan bekerja di basis 10, terutama ketika bekerja dengan nilai moneter di mana artefak pembulatan tidak dapat diterima.

Zenilogix
sumber
2
Saya tidak setuju dengan pernyataan selimut Semua komputer . Ada banyak komputer, yang diakui paling tidak lagi digunakan secara aktif kecuali sebagai benda museum, yang menggunakan format angka desimal untuk penyimpanan & perhitungan. Ada juga BCD - Binary Coded Decimal - digunakan di sejumlah CPU yang lebih baru, termasuk penggunaan terbatas pada CPU Intel. Tidak ada yang relevan dengan pertanyaan yang ada - metode yang digunakan oleh Microsoft Excel untuk menyimpan angka, yang semuanya biner. Tetapi "Semua komputer" tidak benar.
manassehkatz-Reinstate Monica
Saya melihat perubahan dari "Semua komputer" ke "Komputer" - Saya akan menggunakan "Hampir semua komputer" atau "Sebagian besar komputer modern" atau semacamnya. Saya tahu - saya pilih-pilih. Tapi begitu juga komputer :-)
manassehkatz-Reinstate Monica
@manassehkatz Semua komputer digital pada dasarnya adalah biner. BCD hanyalah struktur dasar-10 di atas biner untuk memfasilitasi aritmatika desimal.
Zenilogix
Sementara semua komputer digital pada dasarnya adalah biner, sebenarnya ada beberapa di awal-awal yang berbasis desimal. Tapi saya setuju bahwa BCD pada dasarnya adalah struktur basis-10 di atas biner untuk memfasilitasi aritmatika desimal.
manassehkatz-Reinstate Monica
Jawaban ini terdengar seolah-olah itu kesalahan komputer. Tapi ternyata tidak. Anda dapat mewakili angka berapa pun tepatnya Anda dapat menulis di atas kertas (mewakili 1/3 persis? Mudah ketika menyimpan sebagai pecahan, misalnya). Ini benar-benar tentang apa representasi penulis Excel memilih untuk mewakili angka.
phresnel
-1

Seperti yang dikatakan banyak orang di atas, ini adalah kesalahan representasi internal. Excel telah membuat pilihan untuk angka floating point presisi ganda, 64 bit. Ini memberi Anda 2 64 nilai yang mungkin. Domain bilangan real berisi tak terhingga nilai, jadi ketika Anda mencoba menggunakan yang tidak bisa diwakili oleh Excel, itu akan menggunakan yang terdekat yang bisa diwakili.

Saya telah melihat komentar yang mengatakan bahwa mengingat memori tak terbatas, bilangan real apa pun dapat diwakili. Benar, tetapi tidak ada yang namanya "memori tak terbatas" jadi ini adalah poin yang bisa diperdebatkan. Yang lain menyatakan bahwa Excel dapat menggunakan representasi internal yang lebih besar, misalnya 128 bit. Benar, tetapi, ternyata komputer lebih baik dalam melakukan operasi matematika pada angka yang diwakili dengan jumlah bit yang sesuai dengan ukuran bus prosesor. Jadi komputer 32 bit akan tercepat pada operasi matematika pada angka 32 bit dan komputer 64 bit akan tercepat pada operasi matematika pada angka 64 bit. Jika dan ketika akan ada komputer 128 bit, maka kita dapat mengharapkan Excel untuk pindah ke representasi angka 128 bit. Itu masih akan memberikan satu set angka yang sangat besar tetapi terbatas yang dapat diwakili.

Jika kekhawatiran Anda adalah tentang bagaimana angka-angka terlihat di spreadsheet, maka menggunakan presisi set (jumlah desimal) akan memberi Anda hasil yang konsisten. Jika Anda prihatin tentang perbedaan antara nomor yang Anda ketikkan dan nomor aktual yang disimpan oleh Excel, Anda berhak khawatir. Perbedaannya nyata dan kesalahan akan dilakukan melalui perhitungan yang Anda lakukan. Saya khawatir Anda terjebak dengan kesalahan ini. Ini adalah batasan Excel, bukan bug seperti yang dinyatakan beberapa orang. Kemungkinan tidak akan berubah dalam waktu dekat, jadi jika tidak dapat diterima untuk Anda, saya sarankan Anda mencari aplikasi spreadsheet lain yang dapat mewakili angka dengan presisi lebih tinggi. Tetapi perlu diingat bahwa jika Anda menemukan aplikasi seperti itu, batasannya masih ada. Hanya saja ukuran kesalahannya berbeda.

Tibi
sumber