Thắc mắc kiểu dữ liệu int và double

#include <stdio.h>
#include<math.h>

int main()
{
    printf("Day la chuong trinh tinh bieu thuc ^^\n");
    {
      int x,A;
      int b,c;
      printf("Nhap gia tri x: ");
      scanf("%d",&x);//nhap vao gia tri 5
      b = pow(x,3);//x^3
      c = pow(x,2);//x^2
      A = 3*b - 2*c;
      printf("Gia tri cua A la: %d",A);

    }
    return 0;
}
#include <stdio.h>
#include<math.h>

int main()
{
    printf("Day la chuong trinh tinh bieu thuc ^^\n");
    {
      int x,A;
      double b,c;
      printf("Nhap gia tri x: ");
      scanf("%d",&x);//nhap vao gia tri 5
      b = pow(x,3);//x^3
      c = pow(x,2);//x^2
      A = 3*b - 2*c;
      printf("Gia tri cua A la: %d",A);

    }
    return 0;
}

Đây là 2 đoạn code em thắc mắc,là giống nhau chỉ thay đổi kiểu dữ liệu int và double khi khai báo biến b,c. Khi run chương trình em nhập vào số 5 thì ở kiểu int nó ra số sai là 324 , kiểu double nó ra số đúng là 325. Ở kiểu int em thử nhập các số khác(4,6) thì nó vẫn ra số đúng trừ số 5. Em không biết đây là lỗi gì? Mong các ac giải đáp.em cảm ơn

kết quả như nhau mà bạn

Chắc bạn không dùng gcc :slight_smile:

Thực ra pow() dùng cho số thực nên pow số nguyên thì có khả năng ra kết quả sai.

2 Likes

mình dùng code:blocks nó ra kết quả sai. đưa vào vs thì nó bắt phải xài double.Mình vừa đưa all code của bạn vào code:blocks thì nó vẫn ra kết quả sai :v

vậy hàm pow thì phải truyền kiểu dữ liệu số thực hả b?

Chỉ khi bạn tính với số thực thôi. Nếu bạn đã muốn kết quả nguyên thì không nên dùng pow vì có sai số, hụt 0.0001 thì rút phần nguyên cũng sai.

Đơn giản nhất là cứ thay bằng x*x với x*x*x.

Một ví dụ khá điển hình (vì nó cứ lặp đi lặp lại :smiley: ). In ra số Armstrong. Em không biết tại sao nó vẫn in ra số 75

2 Likes

mình hiểu rồi.cảm ơn b nhiều

cái này là bug của TDM-GCC, uninstall nó liền đi @_@ Tìm cái mingw-w64 mà install ấy, hoặc gcc của msys2.

chắc bạn xài code blocks mà down bản kèm sẵn compiler hả, uninstall nó đi, chịu khó 1 đêm ngồi down VS Community 2017 mà xài. Hoặc thích tự cài thì làm theo hướng dẫn này cấu hình MSYS2 cho CodeBlocks lưu ý là CB nó nhắc code kém lắm ko bằng 1/10 VS. Có cái VS Code nhắc code cũng ngon lành nhưng debug chua quá nên xài VS Community thẳng luôn đi

2 Likes

mình có xài cả vs nữa.đưa qua vs thì nó cũng bắt xài double thay vì int.mà mình thấy nặng nên sử dụng code:blocks thường xuyên hơn

chịu khó xài VS đi, nó nhắc code tốt hơn. CB chả khác gì cái notepad++ cả @_@

2 Likes

Không nên, để nhắc riết quen, không xem docs :slight_smile:

2 Likes

nó ko nhắc ngồi gõ hết nguyên tên hàm chắc chết, ví dụ vector push_back mà phải gõ 9 chữ gõ xong chắc quên hết mình đang viết cái gì @_@

1 Like

Tốt nhất nên đầu tư VSCode + C++ extension hay VS Community để code :slight_smile:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?