หนึ่งในปัญหาคลาสิก เวลาเขียนโปรแกรมที่ทุกคนต้องเจอเลย
ก็คือการบวกลบเลขทศนิยมในภาษาโปรแกรม ของบางภาษา นี้แหละ
เช่น JavaScript, Python, Perl, C#, C, C++, Java, PHP, Fortran
(และอื่นๆ อีกหลายภาษาที่ไม่ได้กล่าวถึง)
.
หลายครั้งที่มันอาจเพี้ยนได้ เช่น
👉 0.1+0.2 ไม่ได้เท่ากับ 0.3
แต่ได้เป็น 0.30000000000000004
.
👉 หรือ 0.1 บวกกัน 10 ครั้ง ก็ไม่ได้เป็น 1
แต่ได้เป็น 0.9999999999999999
.
คนเขียนโปรแกรมเจอแบบนี้เข้าไป
ก็เหมือนมวยโดนหมัดน๊อคมึนงงในดงโค้ด
:
:
แต่ใช่ว่ามันจะเพี้ยนทุกครั้ง ซะเมื่อไร เช่น
0.5+0.5 = 1 (ถูกต้องเป๊ะ)
0.2+0.3 = 0.5 (บังเอิญไม่เพี้ยน)
.
สำหรับ กรณี 0.2 กับ 0.3 มันถูกตัดเศษเหลือเป็น
0.2000000000000000111022302462515654042363166809082031250
กับ
0.2999999999999999888977697537484345957636833190917968750
พอบวกกันจึงได้ 0.5 พอดี แบบฟลุ๊คๆๆ ซึ่งไม่ควรทำได้
(ตรงสอบดูได้ 0.2+0.3 == 0.5 ได้ค่าออกมาเป็น true)
:
:
สาเหตุที่เป็นเช่นนี้
ก็เพราะว่าคอมพิวเตอร์มันรู้จักแต่ เลขฐาน2 อะนะ
ต่อให้เราเขียนโค้ดใช้เลขฐาน10 ก็ตาม
สุดท้ายเวลาโค้ดมันถูกรัน ก็จะกลายเป็นเลขฐาน 2 อยู่ดี
.
😨 แล้วก็เป็นความซวยที่จะมาเยือนคนเขียนโปรแกรม
เพราะเวลาแปลงเลขฐาน10 ไปเป็นเลขฐาน 2
บางกรณีมันแปลงแล้ว ดันได้ตัวเลขที่ไม่รู้จบเสียด้วยซิ
จึงทำให้การเก็บทศนิยมผิดเพี้ยนไปได้
.
สำหรับรูปแบบการจัดเก็บเลขทศนิยม ในหลายภาษา
เขาจะนิยมใช้มาตรฐาน IEEE-754 floating point
เช่น 0.1 จะถูกมองว่าคือ 1/10
.
เมื่อเก็บเป็นเลขทศนิยมฐานสอง
ตามมาตรฐาน IEEE-754 floating point จะได้เป็น
0.0001100110011001100110011001100110011001100110011...
เป็นทศนิยมไม่รู้จบในรูปเลขฐานสอง ....นี้คือสิ่งที่คอมมองเห็น
.
พอคอมแปลงกลับมาเป็นทศนิยม เพื่อให้มนุษย์โลกอ่านเข้าใจ
ในรูปฐาน 10 ก็จะได้เป็น
0.1000000000000000055511151231257827021181583404541015625
ทว่าคอมมันจะตัดให้เหลือแค่ 0.1 (คนจึงเห็นแค่นี้)
:
🤔 ซึ่งความเพื้ยนแบบนี้
แน่นอนทำให้เกิดบั๊กเวลาคำนวณตัวเลข
- ยิ่งงานต้องการคำตอบที่ละเอียดมาก เช่น งานธนาคาร ก็จะประสบปัญหา เป็นต้น
- หรือเวลานำไปใช้ในเงื่อนไขเปรียบเทียบพวก if, while ฯลฯ ก็อาจมีบั๊กเกิดขึ้นได้ เป็นต้น
.
😀 แต่ไม่ต้องห่วง ในหลายๆ ภาษาเขาจะมีวิธีแก้ปัญหานี้อยู่ครับ
ป้องกันการคำนวณตัวเลข ไม่ให้คลาดเคลื่อน เช่น
- ใน Java ก็จะมีคลาส BigDecimal เอาไว้บวกลบคูณหาร สำหรับเลขทศนิยมโดยเฉพาะ
- ใน Python ก็จะมีคลาสคล้ายๆ กัน เช่น Decimal
- ส่วนใน JavaScript อาจใช้ไลบรารี่ ซึ่งมีให้เลือกเยอะเช่น
https://github.com/MikeMcl/decimal.js/
https://github.com/MikeMcl/bignumber.js/
https://github.com/MikeMcl/big.js/
- ภาษาอื่นที่เหลือลองไปศึกษาเองดูนะครับ
.
.
เรื่องบวกลบคูณหาร เลขทศนิยม ถือเป็นเรื่องสำคัญที่ไม่ควรมองข้าม
โดยส่วนตัวก็เคยเจอความเผลอเรอตรงนี้
ในระดับโปรเจคระดับธนาคาร ก็เคยพลาดมาแล้ว
สุดท้ายต้องมาไล่นั่งแก้โค้ดหลายบรรทัด
เสียเวลานั่งไล่ test ใหม่อีกรอบอีก
.
หมายเหตุเห็นคอมเมนต์สงสัยว่า
PHP กับ C# รอดชะตากรรมเดียวกันไหม ?
ก็บอกว่าไม่รอดครับ
.
// ลองดูตัวอย่างโค้ด C#
Console.WriteLine( ((0.1+0.2) == 0.3)); // False
Console.WriteLine( ((0.1+0.2) == 0.30000000000000004)); // True
// ลองดูตัวอย่างโค้ด PHP
echo number_format(0.1+0.2 , 17);
.
++++++
เขียนโดย โปรแกรมเมอร์ไทย thai programmer
อ่านเรื่อง IEEE-754 floating point ได้ที่
https://th.wikipedia.org/wiki/จำนวนจุดลอยตัว
One of the programming time class issues that everyone needs to encounter.
It's a positive, negative, decimal number in the programming language of some languages.
เช่น JavaScript, Python, Perl, C#, C, C++, Java, PHP, Fortran
(And many other languages not mentioned)
.
So many times it can be crazy like
👉 0.1 + 0.2 is not equal to 0.3
But got to be 0.30000000000000004
.
👉 or 0.1 plus 10 times. It's not 1
But got to be 0.9999999999999999
.
The programmers found this.
It's like boxing. I got a punch. I'm confused in the code.
:
:
But it's not crazy every time.
0.5 0.5 0.5 0.5 1 (Exactly correct)
0.2 0.2 0.3 0.3 0.5 (accidentally not crazy)
.
For 0.2 and 0.3 cases, it was cut as debris.
0.2000000000000000111022302462515654042363166809082031250
With
0.2999999999999999888977697537484345957636833190917968750
Let's be positive. I got 0.5 fits. Fluke which I shouldn't do.
(I can see the exam. 0.2 + 0.3 == 0.5 I got the value to be true)
:
:
The cause is like this
It's because computer only knows the base number 2
Even if we write code, use base number 10
Finally, when the code is run, it will become the base number 2 anyway.
.
😨 and it's bad luck to visit the programmers.
Because time converts base number 10 to base number 2
In some cases, it's converted. I get an endless number.
So that the decimal collection is wrong.
.
For decimal numbers storage in multiple languages
He will be popular with IEEE-754 floating point standards.
For example, 0.1 will be seen as 1/10
.
When it's kept as a decimal number, binary digits.
According to IEEE standards-754 floating point will be.
0.0001100110011001100110011001100110011001100110011...
It's an endless decimal in the second base number.... This is what the computer sees.
.
When the computer comes back to a decimal, so that the world can read and understand.
In the base photo, 10 will be.
0.1000000000000000055511151231257827021181583404541015625
But the computer will cut it down to 0.1 (that's all I see)
:
🤔 This kind of friendship
Definitely make a time bug. Calculates numbers.
- The more jobs require a detailed answer, such as banking job, the problem is etc.
- or time to apply in comparison terms. If, while etc, there may be a buck happening. etc.
.
😀 But don't worry. In many languages, there will be a solution to this problem.
Prevent calculation of numbers from discrepancy, e.g.
- In Java, there will be a BigDecimal class. Plus, multiply, multiply for decimal numbers.
- In Python there are similar classes like Decimal
- Parts in JavaScript may use a lot of library to choose from, e.g.
https://github.com/MikeMcl/decimal.js/
https://github.com/MikeMcl/bignumber.js/
https://github.com/MikeMcl/big.js/
- Other languages. Let's study it yourself.
.
.
A positive, multiply, digging, decimal numbers are important things that shouldn't be overlooked.
Personally, I have experienced the accident.
Bank level project. I have already missed it.
Finally, I have to sit and solve many lines of code.
Waste of time. Sit to chase the new test again.
.
Note, see comments, wonder if
PHP and C #survive the same fate?
I told you that you won't survive.
.
// Check out the C code trailer #
Console.WriteLine( ((0.1+0.2) == 0.3)); // False
Console.WriteLine( ((0.1+0.2) == 0.30000000000000004)); // True
// Check out the PHP code trailer
echo number_format(0.1+0.2 , 17);
.
++++++
Written by Thai programmer thai coder
Read IEEE-754 floating point at
https://th.wikipedia.org/wiki/จำนวนจุดลอยตัวTranslated
同時也有2部Youtube影片,追蹤數超過61萬的網紅Peanut Butter,也在其Youtube影片中提到,ช่วงที่รวมปากกาจะเอามาทำรีวิวก็เอ๊ะ.....มีเยอะขนาดนี้ได้ยังไง!! 5555555555 วันนี้เลยเอามาเปิดกรุ ตัวเด่นตัวดังเขียนกันให้ดูไปเลยย แล้วก็มีรุ่นใหม่ๆที...
「java collection」的推薦目錄:
- 關於java collection 在 โปรแกรมเมอร์ไทย Thai programmer Facebook 的最讚貼文
- 關於java collection 在 Melinda Looi Facebook 的精選貼文
- 關於java collection 在 軟體開發學習資訊分享 Facebook 的最佳貼文
- 關於java collection 在 Peanut Butter Youtube 的最佳貼文
- 關於java collection 在 Buron Kanzaki Youtube 的最佳解答
- 關於java collection 在 [Java筆記] Collection 介紹 - 1010Code 的評價
- 關於java collection 在 A Java collection of value pairs? (tuples?) - Stack Overflow 的評價
- 關於java collection 在 JavaGuide/Java集合框架常见面试题.md at master - GitHub 的評價
- 關於java collection 在 Complete Java Collections Framework in 1 Video - YouTube 的評價
java collection 在 Melinda Looi Facebook 的精選貼文
A little history which I didnt know.. ⠀
⠀
The origin of the baju kebaya.⠀
This is written by Hajahfarhana Tarmudi. ⠀
⠀
"Kebaya formerly belonged to the royal family in Java before 1600. During the Dutch occupation of the archipelago, European women began to wear kebaya as official dresses. ⠀
⠀
This traditional outfit is a lot of Malaysian and Indonesian women. It is made of gauze that is matched with sarongs, batik or other traditional clothing such as songket with colorful motifs. ⠀
⠀
It is believed to have come from the Arab states. The Arabs carry baju kebaya (Arabic is abaya) to the archipelago since hundreds of years ago. Then it became known to Malacca, Java, Bali, Sumatra, and Sulawesi.⠀
⠀
Clothing similar to 'kebaya madya' was created first by the Peranakan (Baba and Nyonya) community from Melaka. They dressed in batik sheath and beautiful beaded shoes. ⠀
⠀
⠀
It is a famous long-sleeved shirts in Melaka, Perak, Selangor, Kedah and Perlis. It is then known as 'long shirt' and 'long kebaya'."⠀
⠀
⠀
Interesting.. I am getting to know more about Kebaya or I should call it Long Shirt from now on? ⠀
⠀
⠀
In our collection. Each of the Kebaya set is unique as we do not repeat the colour and texture combo. Come check it out yourself. ⠀
See entire Collection: http://bit.ly/FBML19RAYA
⠀
For your personal shopper, WhatsApp +601229403298.⠀
⠀
#melindalooiraya2019 #raya2019 #pulang #Melindalooi #kebayalabuh #kebaya #batik ⠀
⠀
Model Rita Suraya of The Models Lab KL
java collection 在 軟體開發學習資訊分享 Facebook 的最佳貼文
但是為什麼 Google 會創造一種新的程式設計語言?
用Google的話說,“Go 是出於對現有程式設計語言和系統程式設計環境的挫折。程式設計已經變得太難了,部分地歸咎於程式語言的選擇。一個人必須選擇有效的編譯,高效的執行或易於程式設計;所有這三個都沒有相同的主流語言。程式設計師可以超越安全性和效率輕鬆選擇並轉換到動態型別語言(如Python 和 JavaScript 而不是 C ++ 或更小程度的Java)。Go 企圖將直譯動態型別語言的編程易用性與靜態型別的編譯語言的效率和安全性相結合。它的目標是符合潮流,支援網路和多核心運算的。最後,使用 Go 的目的是快速的:在單台電腦上建構大型可執行檔案它最多需要幾秒鐘。為了滿足這些目標,需要解決一些語言問題:可表達但輕量級的型別系統;concurrency 和 garbage collection;嚴格的相依規格;等等。這些不能通過程式庫或是工具來解決;於是一種新的語言被呼喚出來。
https://softnshare.wordpress.com/…/learnhowtocodegolangpro…/
java collection 在 Peanut Butter Youtube 的最佳貼文
ช่วงที่รวมปากกาจะเอามาทำรีวิวก็เอ๊ะ.....มีเยอะขนาดนี้ได้ยังไง!! 5555555555 วันนี้เลยเอามาเปิดกรุ ตัวเด่นตัวดังเขียนกันให้ดูไปเลยย แล้วก็มีรุ่นใหม่ๆที่น่าสนใจเอามารีวอวกันด้วยค่ะ ชื่อและราคาต่างๆ นัทหาลิงก์มาแปะให้เรียบร้อยแล้วน้า ??
?หากใครสนใจคอลแลคชั่นใหม่!! ของร้าน The Butter and Scotch สามารถสั่งซื้อได้จากลิงก์นี้เลยค้าบ
https://shop.line.me/@thebutterandscotch
?สามารถติดตามดูสินค้าเพิ่มเติม + เสพการจดการเขียนได้ที่นี่เลยค้าบ
https://www.instagram.com/thebutterandscotch/
☁️Tombow ABT
https://bit.ly/3rQwoGb
☁️Koi coloring brush pen
https://shopee.co.th/KOI-COLORING-BRU...
☁️YOYA Brush maker
https://www.yoya.co.th/en/product/38442/dual-brush-pen-ds-904
☁️Moshi Moshi Aquarelle brush
https://www.facebook.com/peanut.butterstation/photos/pcb.2475425675909747/2475354772583504/
☁️Touch brush
https://shopee.co.th/3แท่ง-150.-❤%EF%...
☁️Java Duplex mild color
https://shopee.co.th/ปากกา-Highlight-...
☁️Java Power Line 2500
https://shopee.co.th/JAVA-POWER-LINE-...
☁️Quantum Daiichi 0.5
https://shopee.co.th/ปากกาเจล-Quantum...
☁️Quantum Moji 0.29
https://bit.ly/3urpwRx
☁️Quantum Daiichi 0.5 (Color)
https://bit.ly/31IyflY
☁️POSCA
https://bit.ly/2OjPdE0
☁️Zebra Click art
https://shopee.co.th/Zebra-Clickart-เ...
?Find me more?
IG : https://www.instagram.com/peanut.bt
Facebook : https://www.facebook.com/peanut.butterstation/
Contact for Work : [email protected]
#pencollection #stationeryhaul #peanutbutter
java collection 在 Buron Kanzaki Youtube 的最佳解答
►Hi chào tất cả các bạn, mình là Buron đây! Hôm nay mình rất vui vì đã đạt đến 1000 subscribers, thành công của mình là nhờ tất cả các bạn đã ủng hộ mình ! Một lần nữa mình muốn cám ơn tất cả mọi người đã ủng hộ mình bấy lâu nay
►Nhân dịp đạt 1000 sub mình sẽ tung bản cập nhật mới của project UnlimitedZ-War mang tên là "The Tomb Protectors"
===============================
►Link down map & mod: http://www.mediafire.com/download/d88sa3w50ua232s/Season_2.rar
===============================
►Link hướng dẫn cài đặt: https://www.youtube.com/watch?v=HMmj0AyuHVA
===============================
►Link java 7 : http://www.oracle.com/technetwork/java/javase/downloads/jre7-downloads-1880261.html
===============================
►Link thông tin về kỹ năng sử dụng kiếm thuật: http://www.minecraftforum.net/forums/mapping-and-modding/minecraft-mods/1294232-1-6-4-1-8-dynamic-sword-skills-full-release-for
===============================
►Lưu ý phải thay đổi đường dẫn với java 7 để không xảy ra lỗi !
►Khi down về các bạn bỏ folder mods và Flan vào mục .minecraft . Sau đó bỏ map vào save rồi chiến
►Nếu thấy hay thì đừng quên ấn like và subscribe để mình có động lực làm tiếp video :)
►Map made by: BuronKanzaki
►Sound track: Wavetek-Just Be
►Have fun :D
java collection 在 A Java collection of value pairs? (tuples?) - Stack Overflow 的推薦與評價
... <看更多>
相關內容
java collection 在 JavaGuide/Java集合框架常见面试题.md at master - GitHub 的推薦與評價
先来看一下 Collection 接口下面的集合。 1.1.3.1. List. Arraylist : Object[] 数组; Vector : Object[] ... ... <看更多>
java collection 在 [Java筆記] Collection 介紹 - 1010Code 的推薦與評價
前言在Java中可以幫我們處理一筆資料的除了陣列外,就非Collection API中的元件莫屬了。集合(Collection)就是設計來群組多個資料物件使用, ... ... <看更多>