Skip to content

Instantly share code, notes, and snippets.

@mipsparc
Last active August 26, 2024 14:28
Show Gist options
  • Save mipsparc/5355e8757c9ac1555d84e55a6756420f to your computer and use it in GitHub Desktop.
Save mipsparc/5355e8757c9ac1555d84e55a6756420f to your computer and use it in GitHub Desktop.
Fujitsu SPARC64 Xにて、ハードウェア10進浮動小数点演算をテストしたコード。4.8-4.7-0.1 == 0を検証している。
/*
ここでは、Fujitsu SPARC64 Xにおいてハードウェア10進浮動小数点演算を
テストするためのコードを例示する。コンパイル環境は
Oracle® Developer Studio 12.5
であり、コンパイルコマンドは
$ cc -m64 -xtarget=sparc64x SPARC64_X_Decimal.c
であり、参考文献は
https://docs.oracle.com/cd/E71939_01/html/E71949/gonog.html
にある。
なお、そのままだと dpd_conf.h がSyntax Errorになるので、
バックアップをとった上で当該行を除去すると良い。
コードの内容は、 4.8-4.7-0.1 == 0 の検証である。
*/
#include <dpd_conf.h>
#include <stdio.h>
int main(void) {
_Decimal64 result;
_Decimal64 a = __dpd64_convert_from_uint64(48);
_Decimal64 b = __dpd64_convert_from_uint64(47);
_Decimal64 c = __dpd64_convert_from_uint64(1);
_Decimal64 ten = __dpd64_convert_from_uint64(10);
a = __dpd64_div(a, ten);
b = __dpd64_div(b, ten);
c = __dpd64_div(c, ten);
result = __dpd64_sub(a, b);
result = __dpd64_sub(result, c);
double output = __dpd64_convert_to_double(result);
int same = (output == (double)0.0);
printf("Result: %lf \n Same: %d \n", output, same);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment