2015-08-11 13 views
6

std:ceil không phải là constexpr không phải trong Visual Studio 2015, tôi đang tìm kiếm một thực thi constexpr mà tôi có thể sử dụng thời gian biên dịch - với rất ít thành công.Tìm kiếm hàm constilpr ceil

Mọi trợ giúp đều được đánh giá cao.

+1

Xem [Ceil chức năng: làm thế nào chúng ta có thể thực hiện chính nó?] (http://stackoverflow.com/a/8378022/369872) có vẻ như nó có thể được viết thành constexpr – David

Trả lời

6

Kể từ khi trình biên dịch của Visual Studio 2015 vẫn không cho phép một hàm constexpr có if điều kiện và biến, tôi viết lại giải pháp Jarod42 và loại bỏ chúng:

constexpr int32_t ceil(float num) 
{ 
    return (static_cast<float>(static_cast<int32_t>(num)) == num) 
     ? static_cast<int32_t>(num) 
     : static_cast<int32_t>(num) + ((num > 0) ? 1 : 0); 
} 
4

Bạn có thể sử dụng

constexpr std::int32_t ceil(float num) { 
    std::int32_t inum = static_cast<std::int32_t>(num); 
    if (num == static_cast<float>(inum)) { 
     return inum; 
    } 
    return inum + (num > 0 ? 1 : 0); 
} 

Live demo

Lưu ý: Không làm việc một lần một số nguyên không thể đại diện giá trị float.

+0

Tại sao không phải 'float ceil (float);' giống như cái được cung cấp bởi 'std'? – legends2k

+1

@ legends2k: triển khai này không hoạt động đối với tất cả các giá trị float, chữ ký phản ánh điều đó. – Jarod42

Các vấn đề liên quan