Tag: precision

为什么将double赋值给int不会触发gcc警告?

int i = 3.1 / 2 即使使用-Wall选项也不会引起任何警告。有时,我想知道精确丢失的位置。为什么gcc不支持此警告,而msvc支持这个? 谢谢。 编辑:我的gcc -v显示 Configured with: ../../gcc-4.4.1/configure –prefix=/mingw –build=mingw32 –enable-languages=c,ada,c++,fortran,objc,obj-c++ –disable-nls –disable-win32-registry –enable-libgomp –enable-cxx-flags=’-fno-function-sections -fno-data-sections’ –disable-werror –enable-threads –disable-symvers –enable-version-specific-runtime-libs –enable-fully-dynamic-string –with-pkgversion=’TDM-2 mingw32′ –enable-sjlj-exceptions –with-bugurl=http://www.tdragon.net/recentgcc/bugs.php

什么是c printf%f默认精度?

我很好奇: 如果你做printf(“%f”, number); 声明的精确度是多少? 即会出现多少小数位? 这个编译器是否依赖?

fopen / fopen_s并写入文件

我在C中使用fopen将输出写入文本文件。 函数声明是( ARRAY_SIZE已经定义了ARRAY_SIZE ): void create_out_file(char file_name[],long double *z1){ FILE *out; int i; if((out = fopen(file_name, “w+”)) == NULL){ fprintf(stderr, “***> Open error on output file %s”, file_name); exit(-1); } for(i = 0; i < ARRAY_SIZE; i++) fprintf(out, "%.16Le\n", z1[i]); fclose(out); } 我的问题: 在使用MVS2008进行编译时,我收到警告:警告C4996:’fopen’:此函数或变量可能不安全。 考虑使用fopen_s代替。 我没有看到关于fopen_s更多信息,以便我可以更改我的代码。 有什么建议? 可以指示fprintf以所需的数字精度将数字写入文件吗? 如果我使用long double那么我认为我的答案是好的,直到小数点后15位。 我对吗?