pow(.,.) không cung cấp được độ chính xác để tính được 2^64 đúng đến từng bit. Nên kết quả là số chẵn hay số lẻ, tùy vào may rủi.
Mình có code sau
Sao vậy nhỉ?C++ Code:
- - - Nội dung đã được cập nhật ngày 13-11-2019 lúc 03:02 PM - - -
Mình code
Kết quả cũng y như vậyC++ Code:
pow(.,.) không cung cấp được độ chính xác để tính được 2^64 đúng đến từng bit. Nên kết quả là số chẵn hay số lẻ, tùy vào may rủi.
-...- -.- .. .-.. .-.. - .... . -... . .- ... - .-.-.
Thôi không cần trả lời nữa, nếu quá giới hạn nó sẽ lấy max
Không hẳn như thế, nó tùy vào trình biên dịch và ..
Uốn trục số thành vòng khép kín.
https://en.cppreference.com/w/cpp/la...al_conversions
undefined behaviorA prvalue of floating-point type can be converted to a prvalue of any integer type. The fractional part is truncated, that is, the fractional part is discarded. If the value cannot fit into the destination type, the behavior is undefined (even when the destination type is unsigned, modulo arithmetic does not apply). If the destination type is bool, this is a boolean conversion (see below).
Ada nói cũng đúng, mình code
Nếu nó tính chính xác đến từng bit thì đã không có mấy số 1 như trênC++ Code:
#define bit64 unsigned long long #include <iostream> #include <cmath> using namespace std; int main() { int i=0; while(i<65) { i++; } } //kết quả là /* 0 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 46 0 47 0 48 0 49 0 50 0 51 0 52 0 53 0 54 1 55 1 56 1 57 1 58 1 59 1 60 1 61 1 62 1 63 1 64 1 */
- - - Nội dung đã được cập nhật ngày 14-11-2019 lúc 09:08 AM - - -
@INPT
Theo code trên của mình thì dù giá trị double fit trong ull nhưng vẫn bị truncate, à không, bị làm tròn lên?
Đã được chỉnh sửa lần cuối bởi khoaph : 14-11-2019 lúc 09:15 AM.
Với vc (Vs2010) nó báo lỗi biên dịch (dòng 13):
error C2668: 'pow' : ambiguous call to overloaded function
Cái đó hình như chỉ cần thay thành
là đượcC++ Code:
pow((double)2,i)
Không biết trong vs kết quả có khác trên không nhỉ?