Có ai biết một trình tạo ngẫu nhiên các chương trình C bao gồm tính toán dấu phẩy động không?Tạo ngẫu nhiên các chương trình C với dấu phẩy động
Tôi đang tìm kiếm thứ gì đó giống như Csmith, ngoại trừ Csmith không tạo biểu thức dấu phẩy động và nó tạo ra rất nhiều cấu trúc khác, làm cho nó hơi khó sửa đổi. Tạo tính toán tuần tự sẽ là một khởi đầu tốt cho mục đích của tôi miễn là chúng bao gồm một số điểm nổi. Điều kiện sẽ tốt hơn, nhưng tôi sẽ không cần vòng lặp, con trỏ, hoặc thậm chí mảng.
Vì rất nhiều ngôn ngữ sử dụng cú pháp giống C, máy phát điện như vậy có thể không phải cụ thể cho C. Ngay cả khi nó cụ thể cho ngôn ngữ C khác, tôi có thể xử lý văn bản chương trình đã tạo ngôn ngữ đó vào một chương trình C.
EDIT: đây là đoạn trích của chương trình do Csmith tạo để làm rõ những gì tôi đang tìm kiếm.
...
int64_t *l_374 = &g_189;
int32_t l_375 = (-1L);
int i, j, k;
l_375 &= ((g_106 == ((*l_374) = (&g_324[4] == l_373[0][0][5]))) < 0x80C8L);
return (*g_207);
...
Tôi cũng nên làm rõ rằng trong khi tham gia một chương trình Csmith và thay thế, chẳng hạn, int64_t
với float
có thể đưa ra một chương trình C đúng cú pháp, nó sẽ gần như chắc chắn không đưa ra một chương trình xác định. Tôi có thể kiểm tra xem một chương trình thay thế có chứa hành vi không xác định, nhưng điều này không phải là rẻ, và nếu tôi phải từ chối 99% các chương trình thay thế vì chúng không được xác định, quá trình sẽ quá chậm để có ích.
Tôi hoàn toàn thiếu ngủ ngay bây giờ, vì vậy xin lỗi nếu điều này là ngu ngốc, nhưng tôi đang đọc quyền này? Bạn muốn tạo ngẫu nhiên các chương trình C? Xa ra! Tốt cho bạn! Tại sao? : P – TheIronKnuckle
@TheIronKnuckle Đối với "thử nghiệm vi sai": biên dịch một chương trình * được định nghĩa ngẫu nhiên * C với hai trình biên dịch khác nhau và nếu chương trình cho kết quả khác nhau, bạn đã tìm thấy lỗi trong một trong các trình biên dịch. http://www.linux-mips.org/pub/linux/mips/people/macro/DEC/DTJ/DTJT08/DTJT08PF.PDF –
@TheIronKnuckle Vâng, nó phức tạp hơn một chút với dấu phẩy động, vì nổi -point là underspecified trong C99, và hai trình biên dịch cả hai sẽ được chính xác và cho kết quả khác nhau trong sự hiện diện của dấu phẩy động. Đây là lý do tại sao tính năng này không được bao gồm trong Csmith. Nhưng tôi vẫn nghĩ rằng tôi có thể sử dụng các chương trình điểm nổi ngẫu nhiên cho mục đích của mình. –