Tôi có cảm giác rằng đây chỉ là một lỗi vô hại nhưng tôi vẫn muốn hiểu những gì đang xảy ra.Tại sao Chrome sản xuất 1099 chữ số sau dấu chấm cho (.1) .toString (3)?
Tôi đang chơi với một số mã để hiển thị Peano curve trên canvas có liên quan đến việc biểu diễn tọa độ logic trong cơ sở 3 khi tôi nhận thấy một hàm đã trả về chuỗi dài vô lý trong Chrome. Nhìn kỹ hơn, nó chỉ ra rằng sự biểu hiện
(.1).toString(3)
đánh giá trong Chrome để
0,002200220022002200220022002200220100002100210000110101000202201120201212110212202011212000102021022210120112001022101010120202020022102010100200210110010000202221001022002202102122102110002012010220202020011000222022001200102102202000112022010100102211212012122021012212120012120012221210011021010220200001202121120022222110111121112201212111120221121001002221210000221022021012220020112022001121012011001112000001101100101011002201210200110202021021120211100100210120010202222111221201201100002211002202000110011221210 2102100111000222211012211220200112120002100121210000222002201120220111022021120022101112201220001101012112201211010010110122011201120022210102021100002000121020120001112122222220201200220012211122001022022001222011221100212001100010200001211022021120210222110022221202002120011210220012001022112012202110101212100011220000220200122222102201100202101012110201221202211220201111021112112201120101121122212112220211110002020120201022022121210120002202021212000101222221101122201001100021211101012101011202020110010112202201201001020212002021112020021121202000000222122210022012001201
như đã thấy ở đây: http://jsfiddle.net/zvp8osm8/
Đối với những gì tôi có thể nói, chỉ có 33 chữ số đầu tiên sau dấu chấm có ý nghĩa trong trường hợp này, phần còn lại trông giống như rác ngẫu nhiên mà không có một mẫu dễ nhận biết. Kết quả tương tự với 1099 (!) Chữ số sau khi dấu chấm được tạo cho các căn cứ khác nhau và số mũ quá giống như (10000000000.1).toString(3)
hoặc (.7).toString(7)
. Các giá trị khác như (.5).toString(3)
cũng tạo ra các chuỗi dài, nhưng tất cả các chữ số đều có ý nghĩa.
Các trình duyệt khác ngoại trừ Opera chỉ tạo ra số chữ số hợp lý trong mọi trường hợp, điều này khiến tôi nghĩ rằng sự cố nằm trong công cụ Javascript của Chrome.
Tôi có hai câu hỏi bây giờ:
- Tại sao các đại diện của số thập phân trong cơ sở 3 chứa rất nhiều chữ số không đáng kể trong Chrome?
- Các chữ số ngẫu nhiên có thể đến từ đâu?
Căn cứ 5, 7, 9, v.v. cũng tạo ra kết quả tương tự. Có lẽ logic đằng sau đó là giá trị cơ bản lẻ. – VisioN
Một người nào đó sẽ lấp đầy bạn tốt hơn, nhưng tôi sẽ nguy hiểm đoán rằng đó là bởi vì không có cách chính xác để đại diện cho 0,1 trong nhị phân. (xem lỗi dấu phẩy động) – Mardoxx