Vì 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.
Vì 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.
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);
}
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);
}
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.
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