如何零误差保存浮点数

C、C++和Java语言
回复
头像
billcalendar
帖子: 138
注册时间: 2012-03-17 11:05
送出感谢: 3 次
接收感谢: 0

如何零误差保存浮点数

#1

帖子 billcalendar » 2013-05-11 10:45

是这样的,我做数值计算;一个程序输出了一堆数,想在另一个程序使用,就这一步我想让数据原来是什么样的被读进去还是什么样的,怎么弄?
ps:fprintf保存数据会有截断误差 :em06
头像
bzimage
帖子: 672
注册时间: 2006-03-14 10:25
送出感谢: 1 次
接收感谢: 5 次

Re: 如何零误差保存浮点数

#2

帖子 bzimage » 2013-05-11 13:15

代码: 全选

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char** argv) {
    double old_value = 3.1415926535897932;
    printf("%f\n", old_value);
    
    int size = sizeof(old_value);
    printf("%d\n", size);

    //save the value to char array, which can be saved to disk
    char *ptr = malloc(size);
    memcpy(ptr, &old_value, size);
    
    int i;
    for (i = 0; i < size; i++) {
        printf("%d\n", *(ptr + i));
    }

    //use the char array to recover the value
    double new_value;
    memcpy(&new_value, ptr, size);
    printf("%f\n", new_value);
    
    //check 
    if (old_value == new_value) {
        printf("%s\n", "good");
    } else {
        printf("%s\n", "囗囗囗囗");
    }
    
    return (EXIT_SUCCESS);
}
头像
cjxgm
帖子: 1950
注册时间: 2010-04-23 20:40
系统: Arch Linux
来自: 浙江·杭州
送出感谢: 1 次
接收感谢: 30 次
联系:

Re: 如何零误差保存浮点数

#3

帖子 cjxgm » 2013-05-11 17:31

fwrite 直接写出不就好了?
[c]
float numbers[...];
// ...
FILE * fp = fopen("output_file", "w");
fwrite(numbers, sizeof(numbers), 1, fp);
fclose(fp);
[/c]
这些用户感谢了作者 cjxgm 于这个帖子:
billcalendar (2013-05-11 19:18)
评价: 3.7%
回复

回到 “C/C++/Java”