重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

Fortran言語にはsign(x,y)の関数があります、つまりxの絶対値をもち、かつyの符号をもつ値を生成する関数です。
C言語にこのような関数をも使いたいのですが、調べてみるとcopysignという関数がありました、関数の機能説明もFortaranのsignと同じとなっています。しかしながら、実際にCのソースファイルにcopysignを使うと、ビルド時に、「error C3861: 'copysign': 識別子が見つかりませんでした」のエラーが出てきました。また宣言時に「#include <math.h>も入れています。
 どちら様がご存知ならば教えていただければ幸いなことです。
 宜しくお願い致します!<^ ^>!!!

A 回答 (5件)

Visual studio 2005でしたら


#include <float.h> を追加し
copysignを_copysign(アンダーラインを前につける)にすれば、できるはずです。
当方、visula studio 2008で確認済みです。
    • good
    • 0
この回答へのお礼

大変助かりました。問題が解決しました。
本当に有り難うございました。感心します!<^^>!!<[[[]]]]>!!

お礼日時:2011/08/08 14:39

因みに、C言語の基本は「無ければ作る」です。



で、「無ければ作る」の次に考えるのは「あっても、なくても、どっちでも動く」と言う工夫。これは「移植性」の為に必要。

あと、マクロ版を使う上での注意が1つあって「副作用がある引数は渡すな」という点。副作用があったらどうなるかは、やってみると判る。
    • good
    • 0
この回答へのお礼

どうも有り難うございました。

お礼日時:2011/08/08 13:20

こんにちは。



環境がわかりませんがw
MSDNのVisual Studio.NET 2003には、

_copysign()ってのがあり、

double _copysign(
double x,
double y
);

必須ヘッダーは<float.h>となっておりますが・・・

はずしていたらごめんなさい。

参考URL:http://msdn.microsoft.com/ja-jp/library/0yafk1hc …
    • good
    • 0
この回答へのお礼

教えていただき、どうも有り難うございました。
ただし、」ヘッダーに<float.h>を入れても、うまくいかないみたいですね。

お礼日時:2011/08/08 13:21

マクロで書けるので、マクロで書いてしまいましょう。



#ifndef sign
#define sign(x,y) ((y) < 0 ? ((x) < 0 ? (x) : -(x)) : ((x) < 0 ? -(x) : (x)))
#endif
    • good
    • 0

使っている環境くらい掲示しましょうよ。



C99で追加されている標準関数…なんでしょうかね?
http://www.c-tipsref.com/reference/math/copysign …

VS++2008EEでヘッダファイル内を検索すると…とりあえずあるようですが……。
使っているコンパイラによっては未対応…ということもありましょう。
    • good
    • 0
この回答へのお礼

どうも有り難うございます。
使用環境はMicrosoft Visual Studio 2005です。
また、うまくいっていないので、引き続き教えていただければ幸いなことです。
宜しくお願い致します。

お礼日時:2011/08/08 13:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!