C 或 C++ 中是否有 "inverted" trunc 函数?
Is there an "inverted" trunc function in C or C++?
C 或 C++ 中是否有类似于 trunc 的函数,可以舍去负数并舍入正数?
就像这个例子:
-3.3 到 -4 或 2.1 到 3
我只能找到 "inverse" 函数 trunc。但很难相信这不存在。我真的必须首先通过 if 查询积极性,然后相应地将其四舍五入吗?我需要这个,因为我有两个向量之间标量积的符号。所以 1、-1 或 0.
首先,您可以对 return、floor
或 ceil
使用内联条件。这里:
#include <math.h>
inline double InvertedTrunc(double Number) {
return Number < 0 ? floor(Number) : ceil(Number);
}
实现此功能的另一种方法是截断数字,并将其绝对值增加一。这也会起作用。不需要math.h
但是不建议大数因为会溢出:
inline double InvertedTrunc(double Number) {
return (Number == (int)Number ? Number : ((int)Number)+(Number < 0 ? -1 : 1)); //casting to int truncates it
} //However, this option is susceptible to overflow, and it is not recommended for large numbers
C 或 C++ 中是否有类似于 trunc 的函数,可以舍去负数并舍入正数? 就像这个例子:
-3.3 到 -4 或 2.1 到 3
我只能找到 "inverse" 函数 trunc。但很难相信这不存在。我真的必须首先通过 if 查询积极性,然后相应地将其四舍五入吗?我需要这个,因为我有两个向量之间标量积的符号。所以 1、-1 或 0.
首先,您可以对 return、floor
或 ceil
使用内联条件。这里:
#include <math.h>
inline double InvertedTrunc(double Number) {
return Number < 0 ? floor(Number) : ceil(Number);
}
实现此功能的另一种方法是截断数字,并将其绝对值增加一。这也会起作用。不需要math.h
但是不建议大数因为会溢出:
inline double InvertedTrunc(double Number) {
return (Number == (int)Number ? Number : ((int)Number)+(Number < 0 ? -1 : 1)); //casting to int truncates it
} //However, this option is susceptible to overflow, and it is not recommended for large numbers