Có liên quan liên quan đến câu hỏi this, chính xác những gì đang xảy ra ở đây với định dạng số?Định dạng số nội bộ Mathematica và độ chính xác
In[1] := InputForm @ 3.12987*10^-270
Out[1] := 3.12987`*^-270
In[2] := InputForm @ 3.12987*10^-271
Out[2] := 3.1298700000000003`*^-271
Nếu bạn sử dụng *10.^
như số nhân sự chuyển tiếp là nơi bạn sẽ ngây thơ mong đợi nó sẽ:
In[3] := InputForm @ 3.12987*10.^-16
Out[3] := 3.12987`*^-16
In[4] := InputForm @ 3.12987*10.^-17
Out[4] := 3.1298700000000004`*^-17
trong khi *^
mất quá trình chuyển đổi một chút nữa, mặc dù nó là máy có độ chính xác bắt đầu bong ra:
In[5] := InputForm @ 3.12987*^-308
Out[5] := 3.12987`*^-308
In[6] := InputForm @ 3.12987*10.^-309
Out[6] := 3.12987`15.954589770191008*^-309
Các cơ sở bắt đầu tan rã chỉ sau nhiều
In[7] := InputForm @ 3.12987*^-595
Out[7] := 3.12987`15.954589770191005*^-595
In[8] := InputForm @ 3.12987*^-596
Out[8] := 3.1298699999999999999999999999999999999999`15.954589770191005*^-596
Tôi giả định rằng các chuyển tiếp này liên quan đến định dạng Mathematica giữ số của nó, nhưng có ai biết hay quan tâm đến nguy cơ một người được giáo dục đoán, làm cách nào?
+1 để sử dụng 'không hoạt động 'trong khi mô tả hành vi của phần mềm. –
Cảm ơn bạn vì thông tin chi tiết. Việc chuyển đổi sang độ chính xác tùy ý luôn làm tôi bối rối, nhất là khi tôi phải ghi một lượng lớn dữ liệu vào một tệp và đột nhiên ~ 16 ký tự dữ liệu chính xác được thêm vào mọi số! – Timo
@Timo 16 ký tự có vẻ quá mức. Bạn có nghĩa là số lượng bạn nhận được là khoảng 16 byte lớn hơn một máy tính tăng gấp đôi? Hoặc bạn quan sát hiện tượng bit bảo vệ đó? Nếu những con số được đề cập trong thực tế nằm trong phạm vi kích thước của máy đôi thì hãy đăng hoặc gửi cho tôi một ví dụ, vì nó có thể chỉ ra một vấn đề trong mã của bạn hoặc trong Xuất hoặc Xuất của Mathematica, tùy theo bạn đang sử dụng. –