これは kv とは直接関係ない話。
fesetround(FE_DOWNWARD); fesetround(FE_TONEAREST); fesetround(FE_TOWARDZERO); fesetround(FE_UPWARD);
| testfesetround1.cc |
/*
* testfesetround1.cc
* g++ testfesetround1.cc
*/
#include <iostream>
#include <math.h>
#include <fenv.h>
void testrint(void)
{
int i;
double x;
for (i = -20; i <= 20; i++) {
x = (double) i / 10;
std::cout << "x=" << x << " ";
std::cout << "rint(x)=" << rint(x) << std::endl;
}
}
int main(void)
{
std::cout << "まず普通に rint() を使う。rounding to the nearest even を確認"
<< std::endl;
testrint();
std::cout << "fsetround(FE_DOWNWARD) をして同じことをする。" << std::endl;
fesetround(FE_DOWNWARD);
testrint();
std::cout << "fsetround(FE_UPWARD) をして同じことをする。" << std::endl;
fesetround(FE_UPWARD);
testrint();
std::cout << "fsetround(FE_TOWARDZERO) をして同じことをする。" << std::endl;
fesetround(FE_TOWARDZERO);
testrint();
return 0;
}
|
rint() は、double 型のデータを 整数に四捨五入 (正確には rounding to the ...) する関数と覚えていたけれど、 double 型のデータを丸めモードに従って整数値に丸める関数、 と覚え直す必要があるわけだ。
桂田 祐史