如何解决用脚本逐个减去原始浮点文件?
我有两个文件,它们是低端32位浮点值的原始序列(没有无穷值,例如无穷大,NaN,非正规等),我想在第三个文件中产生它们的元素差异。
现在,我可以用几乎任何编译语言编写一个小实用程序来相对高效地完成此任务,但是我想知道是否可以使用通用工具用短脚本更轻松地实现相同目的。我的直觉说“不”,因为这是相当“非文本”的工作,但也许我错了。
解决方法
将执行此操作的快速perl
脚本(将两个文件作为命令行参数,写入标准输出):
#!/usr/bin/env perl
use warnings;
use strict;
open my $file1,"<:raw",$ARGV[0] or die "Unable to open $ARGV[0]: $!\n";
open my $file2,$ARGV[1] or die "Unable to open $ARGV[1]: $!\n";
binmode STDOUT,":raw";
while (read($file1,my $s1,4) == 4 && read($file2,my $s2,4) == 4) {
my $f1 = unpack "f<",$s1;
my $f2 = unpack "f<",$s2;
print pack("f<",$f1 - $f2);
}
此处的关键是pack
和unpack
的{{1}}格式,以使用显式的低端单精度浮点数(在主机系统的本机格式中,通常为IEEE754硬件)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。