-
Title:
-
Description:
-
Ban đầu, nếu tôi compile và run cái tester,
-
tất cả các methods chỗ actual sẽ return 0. Hãy sửa lại
-
cái amdahlSpeedup trước. Hiện tại, nó đang return 0.
-
Sẽ ra sao nếu tôi viết như này vào?
-
Giờ, nếu tôi chạy tester lại,
-
tôi có actual là 2.875. Trong khi tôi
-
hi vọng nó là 1.6. Tôi nghĩ tốt hơn là nên quay lại và sửa nó.
-
Ngay bây giờ, cái này tính phép chia trước,
-
nên 1/s và s/n.
-
và sau đó cộng và trừ ở giữa.
-
Và cái đống này chả có liên quan gì
-
với cái ban đầu cả. Cả phần này, từ s tới n
-
phải ở trong mẫu số,
-
và 1-s cũng phải đi với nhau
-
trong phần tử số của nó. Hãy thử lại.
-
Có vẻ như Amdalh đã hoạt động tốt, nhưng ta vẫn cần
-
sửa cái crossRatio. Tôi sẽ thử
-
làm như cái ban đầu một lần nữa. Tôi viết nó ra
-
trông giống như ban đầu, nhưng được cho vào 1 dòng.
-
Nên, nếu tôi return cái đống này và compile
-
Tôi có 1 lỗi, unexpected type, required: class found: value.
-
Lỗi này nghe có vẻ không có ý nghĩa nhiều cho lắm
-
nhưng đây là 1 gợi ý nhỏ
-
về điều gì sắp tới. 1 cặp dấu ngoặc
-
như này, ngay theo sau là rất nhiều số khác, có một nghĩa khác.
-
Trường hợp này, nếu bạn cho một kiểu vào đây
-
thay vì một biểu thức a-c. Điều tôi phải chỉ ra
-
là tôi muốn nhân, và tôi cần phải làm nó
-
ở trên đây nữa. Và giờ nếu tôi thử chạy
-
cái tester lần nữa. Tôi vẫn chưa có câu trả lời đúng cho crossRatio.
-
Đó là vì khi ta có rất nhiều toán tử
-
mà cùng mức ưu tiên với nhau, phép tính sẽ chỉ bắt đầu từ trái
-
đi sang phải, thay vì tính
-
(a-c)x(b-d) chia cho cả cục (b-c)x(a-d)
-
Nó sẽ làm (a-c)x(b-d) chia (b-c)
-
và nhân cả cục với (a-d).
-
Điều ta cần làm ở đây,
-
là nhóm mẫu số lại. nhóm luôn tử số vào nữa,
-
nếu tôi thực sự muốn, nhưng nó cũng không
-
có nhiều sự khác biệt. Nếu tôi compile lại, và chạy tester,
-
tôi bây giờ đã có 2 method hoạt động chính xác. Giờ cho cái average. Tôi có thể return
-
tổng của đống này, tất cả chia 4.
-
Hãy xem nó hoạt động như nào. Nếu tôi chạy tester, có vẻ nó hoạt động trong trường hợp này
-
nhưng không phải trong trường hợp khác. Hãy thử trường hợp thứ 2.
-
Tôi sẽ vào trong tester
-
trường hợp mà nó không hoạt động là khi ta thử
-
tính trung bình của 3,4,3,3.
-
Thực tế, ta muốn nó là 3.25, nhưng có vẻ như
-
ta đã mất phần thập phân. Java phiên dịch cái này
-
như phép chia cho số nguyên, vì 4 là integer, và a,
-
b, c, d đều được khai báo là các số nguyên.
-
Có vài cách tôi có thể sửa nó. Tôi có thể viết 4 là 4. , hoặc 4.0 và sau đó
-
sẽ có câu trả lời đúng ở đây. Hoặc ta có thể thực sự
-
thay đổi tất cả các cái ints thành doubles, và sau đó tôi không phải
-
cho cái 4 là một double nữa.
-
Tôi có thể compile nó và chạy tester, và nó vẫn hoạt động.
-
Đó là vì nếu bất kỳ biến nào ở đây là double,
-
cả phép toán trong dấu ngoặc này sẽ coi như là double,
-
và một double chia cho một int thì không phải
-
là phép chia số nguyên, nó sẽ là phép chia bình thường.
-
Đó là các thứ đơn giản kết hợp với nhau.
-
Có vẻ ta thấy nó đúng, nhưng máy tính sẽ đọc nó sai
-
và compiler cũng không cảnh cáo bạn.
-
Khi ta chạy cái này với toàn bộ ints và không có double, ta thấy rằng
-
nó đã kết thúc vì một runtime error. Đây là
-
một ví dụ tốt giải thích vì sao nó lại hữu dụng khi nghĩ xem
-
bạn muốn câu trả lời là gì trước khi làm. Tính toán thêm
-
vài ví dụ và sau đó viết code.